###########################################
#Makefile for simple programs
###########################################
INC=
LIB=-lpthread
CC=gcc
CXX=g++
LINK=g++ #-fpermissive:表示兼容老语法
C_FLAGS= -g -Wall -fpermissive -std=c11
CXX_FLAGS= -g -Wall -fpermissive -std=c++11
INC_PATH= -I ./ -I ./kenlm -I ./kiss_fft130 -I ./iniparser2/src
LIB_PATH=-L ./
EXT_LIB= -Wl,-rpath ./ -ltensorflow -lkenlm -lkenlm_util -lkenlm_builder -lkenlm_filter -lkenlm_interpolate -lbz2 -lz -llzma -pthread PRG=test SRCS=$(wildcard *.c)
SRCS+=$(wildcard *.cpp) C_OBJS=$(patsubst %.c,%.o,$(wildcard *.c))
CXX_OBJS=$(patsubst %.cpp,%.o,$(wildcard *.cpp)) all:$(PRG) #链接的时候需要库文件
$(PRG):$(CXX_OBJS) $(C_OBJS)
$(LINK) $^ $(LIB_PATH) $(EXT_LIB) -o $@ #编译的时候需要头文件
%.o:%.cpp
$(CXX) $(CXX_FLAGS) -c $< $(INC_PATH) -o $@ %.o:%.c
$(CC) $(C_FLAGS) -c $< $(INC_PATH) -o $@ .PRONY:clean
clean:
@echo "Removing linked and compiled files......"
rm -rf $(PRG) $(CXX_OBJS) $(C_OBJS)
-I(大写i),添加包含路径
-I在编译时用,告诉编译器去哪个路径下找文件
如:-I /home/hello/include
表示将/home/hello/include目录作为第一个寻找头文件的目录。
编译器的寻找顺序是:/home/hello/include-->/usr/include-->/usr/local/include。
如果在/home/hello/include中有个文件hello.h,则在程序中用#include<hello.h>就能引用到这个文件。
可以加多个包含路径,编译器的寻找顺序为添加的顺序。
-l(小写L),添加引用链接库
-l在链接时用到,它的作用是告诉链接器,要用到哪个库。
如:-lpthread
告诉链接器(linker),程序需要链接pthread这个库,这里的pthread是库名不是文件名,具体来说文件句是libpthread.so。
-L,添加链接库路径
-L 后跟路径,告诉链接器从哪找库(.so文件或者.a文件),只有在链接时会用到。
如:-L /home/hello/lib
表示将/home/hello/lib目录作为第一个寻找库文件的目录,寻找顺序是:/home/hello/lib-->/usr/lib-->/usr/local/lib。
可以加多个包含路径,链接器的寻找顺序为添加的顺序。
-Wl,rpath,添加运行时库路径
-Wl,rpath 后面也是路径,运行的时候用。这条编译指令会在编译时记录到target文件中,所以编译之后的target文件在执行时会按这里给出的路径去找库文件。
如:-Wl,rpath=/home/hello/lib
表示将/home/hello/lib目录作为程序运行时第一个寻找库文件的目录,程序寻找顺序是:/home/hello/lib-->/usr/lib-->/usr/local/lib。
可以加多个包含路径,程序在运行时的寻找顺序为添加的顺序。
-L是编译路径,-Wl,rpath是运行路径,在配置工程的时候为了标准化,编译出的target(.so或是可执行文件)
不一定跟源文件(main.cpp,XX.cpp)放在一个文件夹下。如不在一个文件夹下,在编译时,-L后面跟的是相对
于源文件的路径,-Wl,rpath后面跟的是相对于target(.so或是可执行文件)的路径,确切来说是相对于工作
目录的路径。不同的IDE在配置有时候会一些细微不同,需要注意。

Linux Makefile简单模板的更多相关文章

  1. Linux makefile 教程 非常详细,且易懂(转)

    转自:http://blog.chinaunix.net/uid-27717694-id-3696246.html 原文地址:Linux makefile 教程 非常详细,且易懂 作者:Deem_pa ...

  2. 很详细、很移动的Linux makefile教程:介绍,总述,书写规则,书写命令,使用变量,使用条件推断,使用函数,Make 的运行,隐含规则 使用make更新函数库文件 后序

    很详细.很移动的Linux makefile 教程 内容如下: Makefile 介绍 Makefile 总述 书写规则 书写命令 使用变量 使用条件推断 使用函数 make 的运行 隐含规则 使用m ...

  3. Linux Makefile文件编写详细步骤与实践

    Linux Makefile文件编写详细步骤与实践 1.makefile概述 Windows环境下IDE会帮你完成makefile文件的编写,但在UNIX环境下你就必须自己写makefile了,会不会 ...

  4. Linux 下 简单客户端服务器通讯模型(TCP)

    原文:Linux 下 简单客户端服务器通讯模型(TCP) 服务器端:server.c #include<stdio.h> #include<stdlib.h> #include ...

  5. Gcc的Makefile简单使用

    Gcc的Makefile简单使用http://blog.chinaunix.net/uid-9330295-id-2425867.html

  6. Linux的简单介绍和常用命令的介绍

    Linux的简单介绍和常用命令的介绍 本说明以Ubuntu系统为例 Ubuntu系统的安装自行百度,或者参考http://www.cnblogs.com/CoderJYF/p/6091068.html ...

  7. 从零单排Linux – 1 – 简单命令

    从零单排Linux – 1 – 简单命令 Posted in: Linux 从零单排Linux – 1 一.Linux的简单命令: 1.忘记root密码: 读秒时按任意键进入 – e – ↓选择第二个 ...

  8. Linux下简单的socket通信实例

    Linux下简单的socket通信实例 If you spend too much time thinking about a thing, you’ll never get it done. —Br ...

  9. Linux Makefile自动生成--config.h

    Linux Makefile自动生成--config.h http://blog.csdn.net/spch2008/article/details/12510805

随机推荐

  1. android - 调用系统分享功能分享图片

    step1: 编写分享代码, 将Uri的生成方式改为由FileProvider提供的临时授权路径,并且在intent中添加flag 注意:在Android7.0之后,调用系统分享,传入URI的时候可能 ...

  2. text字段增加处理

    --text字段增加处理 --创建测试表 ),detail text) insert into test ','A*B' --定义添加的的字符串 ),@postion int select @s_st ...

  3. 用NPOI创建Excel、合并单元格、设置单元格样式、边框的方法

    本篇文章小编为大家介绍,用NPOI创建Excel.合并单元格.设置单元格样式.边框的方法.需要的朋友参考下 今天在做项目中,遇到使用代码生成具有一定样式的Excel,找了很多资料,最后终于解决了,Ex ...

  4. python(58):python下划线

    详解Python中的下划线 本文将讨论Python中下划线(_)字符的使用方法.我们将会看到,正如Python中的很多事情,下划线的不同用法大多数(并非所有)只是常用惯例而已. 单下划线(_) 通常情 ...

  5. Lua中的loadfile,dofile,require使用,最后还有调试

    1.loadfile---只编译,不运行. loadfile编译代码成中间码并且返回编译后的chunk作为一个函数,而不执行代码:另外loadfile不会抛出错误信息而是返回错误代号. loadstr ...

  6. android下使用adb启动程序或者服务

    susetprop service.adb.tcp.prot 5555stop adbdstart adbdnetstat 使用 adb install hello.apk可以安装一个apk但并不能启 ...

  7. 在python3.3后urllib2已经不能再用,只能用urllib.request来代替

    版权声明:本文为博主原创文章,未经博主允许不得转载. 在python3.3后urllib2已经不能再用,只能用urllib.request来代替 response=urllib2.urlopen(' ...

  8. redis集群主流架构方案分析

    Redis在互联网大数据平台有着广泛的应用,主要被用来缓存热点数据,避免海量请求压垮数据库,同时可以提升服务节点的响应速度和并发量.随着数据量的增多,由于redis是占用单台物理机或虚机的内存,内存资 ...

  9. MAMP和WAMP搭建Web环境,数据库,数据分布可视化

    MAMP和WAMP搭建Web环境,数据库,数据分布可视化 1. 数据库 用MAMP和WAMP搭建Web环境,数据分布可视化 Web环境Web服务器:Apache.Nginx,处理Web请求数据库:My ...

  10. 【linux】提醒"libc.so.6: version `GLIBC_2.14' not found"系统的glibc版本太低

    原文链接:http://www.myexception.cn/linux-unix/1622052.html [linux]提示"libc.so.6: version `GLIBC_2.14 ...