Makefile_笔记

参考文章:

makefile中wildcard的用法:http://blog.csdn.net/liangkaiming/article/details/6267357

makefile函数集锦:http://blog.csdn.net/turkeyzhou/article/details/8612841

一个通用的Makefile:http://www.cnblogs.com/lidabo/p/4521123.html

makefile使用总结: http://www.cnblogs.com/wang_yb/p/3990952.html

1、常用变量

1)自动变量

$@                              规则的目标所对应的文件名  
$<                              规则中的第一个相关文件名  
$^                              规则中所有相关文件的列表,以空格分割  
$?                              规则中日期新于目标的所有相关文件的列表,以空格分割  
$(@D)                           目标文件的目录部分  
$(@F)                           目标文件的文件名部分  


2)预定义变量

AR                               归档维护程序,默认值=ar  
CPP                              c预处理程序,默认值=cpp  
CC                               c编译程序,默认值=cc  
AS                               汇编程序,默认值=as  
RM                               文件删除程序,默认值=rm -f  
  
ARFLAGS                          传给归档维护程序的标志,默认值=rv  
CPPFLAGS                         传给c预处理程序的标志,无默认值  
CFLAGS                           传给c编译程序的标志,无默认值  
ASFLAGS                          传给汇编程序的标志,无默认值  
LDFLAGS                          传给链接程序(ld)的标志,无默认值 

-c   只编译,不链接

-C  告诉预处理器不要丢弃注释,配合-E使用

-E  预处理后立即停止,不进行编译,预处理后的代码默认送往标准输出

-S  编译后立即停止,不生成目标文件.o,输出汇编文件

-P  告诉预处理器不要产生#line命令

-s --slient :禁止命令显示

-n --just-print : 只显示命令,不执行

-i --ignore-errors : 忽略命令错误

-k --keep-going : 忽略某个规则错误,继续执行其他规则

-w --print-directory : 输出信息看到进入或者离开当前目录 

-e : 使用环境变量

-f --file : 指定Makefile文件

-t --touch : 更新目标文件时间,但不更新目标文件,假装编译过目标,但不是真正的编译目标,只是把目标变成编译过的状态

有的时候我们不想执行Makefile规则,只是想检查下命令或者执行序列,(用于调试) 可以使用以下参数:
-n --just-print --dry-run --recon

-q --question : 找目标,如果目标存在不打印,若不存在,打印一条出错信息

-W <file>   
--what-if=<file>
--assume-new=<file>
--new-file=<file> : 需要指定一个文件(通常是源文件或者依赖文件),和-n参数一起使用,用来查看依赖文件所发生的规则命令
和-p -v参数一起,来输出makefile被执行时的信息

-b -m 忽略和其他版本make的兼容性

-B --always-make :认为所有目标都更新

-C <dir>  --directory=<dir> : 指定读取makefile的目录

-debug[=<options>] : 输出make的调试信息级别
-d : 等同于 --debug=a

-e  --environment-overrides : 指明环境变量的值覆盖makefile中定义的变量的值

-j [num]  --jobs[=num] : 同时运行命令的个数(多核并行)

-p   --print-data-base : 输出makefile中所有的数据,包括规则和变量

-q  --question : 不运行也不输出,仅仅检查目标是否需要更新,0需要更新,2错误发生

-r  --no-builtin-rules : 禁止make使用任何隐含规则

-R  --no-builtin-variabes : 禁止make使用任何作用于变量上的隐含规则

 

 

 

【函数】
wildcard : 获取工作目录下所有c文件列表

subst : 字符串替换

patsubst : 模式字符串替换

strip : 去空格

findstring : 查找字符串

filter : 过滤,保留符合格式的字符串

filter-out : 过滤,保留不符合格式的字符串

sort : 升序 排序

word : 去字符串中n个单词

wordlist :取单词串

words : 统计单词个数

firstword : 去首字母

dir : 从文件名中取目录

notdir :从文件名中取出非目录部分

suffix : 取后缀

basename : 取前缀

addsuffix : 加后缀

addprefix : 加前缀

join : 连接单词

foreach : 循环

call : 用来创建新的参数化函数

shell : 新生成一个shell程序来执行命令

【隐含规则】
C的隐含规则:$(CC) -c $(CPPFLAGS) $(CFLAGS)
C++隐含规则: $(CXX) -c $(CPPFLAGS) $(CFLAGS)

ARFLAGS : 打包程序AR命令参数,默认值是rv

CFLAGS : c语言编译器参数

CXXFLAGS : c++编译器参数

CPPFLAGS : c预处理器参数

LDFLAGS : 链接器参数 

 

 

安装交叉编译工具链

1)获取工具链的绝对路径,例如:/opt/buildroot-gcc342/bin

2)修改环境变量PATH的值

$ cd  ~  
$ vim  .bashrc
在最后一行中添加:
   export  PATH=$PATH: /opt/buildroot-gcc342/bin
保存退出
执行 $source ~/.bashrc

或者

$vim /etc/profile
添加:
export  PATH=$PATH: /opt/buildroot-gcc342/bin
保存退出
最后执行:source /etc/profile 
执行 $source ~/.bashrc

 

添加环境变量,例如:

 

1)对linux下所有用户永久有效

vim /etc/profile文件,添加CLASSPATH变量

export CLASSPATH=./JAVA_HOME/lib;$JAVA_HOME/jre/lib

执行  #source /etc/profile后生效
 

2)对单个用户永久有效

vim /home/用户/.bash.profile 

export CLASSPATH=./JAVA_HOME/lib;$JAVA_HOME/jre/lib

执行  #source /home/用户/.bash.profile后生效

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值