从事实时计算多年,熟悉jstorm/spark/flink/kafka/rocketMq, 热衷于开源,希望在这里和前辈们一起学习与分享,得到长足的进步!邮箱:hustfxj@gmail.com 我的githup地址是:https://github.com/hustfxj。欢迎和大家一起交流探讨问题。
分类: C/C++
2013-09-17 20:45:51
Makefile的基本单位是“规则”,每一条规则说明一个目标文件。该规则的一般格式为:
A [属性] : B
(tab)
(tab)
A表示目标文件列表;B表示依赖文件列表。
注意: 当命令行过长时,可以在右边界放入一个反斜杠(\),另起一行;
Makefile的行注释符号是#。
举个例子:
=== makefile 开始 ===
helloworld:file1.o file2.o
gcc file1.o file2.o -o helloworld
file1.o:file1.c file2.h
gcc -c file1.c -o file1.o
file2.o:file2.c file2.h
gcc -c file2.c -o file2.o
=== makefile 结束 ===
A:B中“:”是一般的分隔符,但双冒号“::”也是一种分隔符。一般来说,一个文件只能在目标的位置出现一次,只有使用::才允许多次作为目标文件。如下:
A:B
#命令
A:C
#命令
以后遇到其他的分隔符,可以具体查找网络求解。
每条规则都可以存在目标文件属性,一般的属性有:
属性 |
属性作用 |
.IGNORE |
忽略该规则中所有命令的执行错误 |
.PRECIOUS |
保留产生的中间文件 |
.SILENT |
命令不在屏幕显示 |
如下:
File.o .PRECIOUS:file.c
#命令
我们还可以控制每条命令行的属性,一般放在制表符之后,常见的有-、+、@。如下所示:
Main.o : main.c
-gcc –c main.c
- 表示忽略该命令行的错误,继续执行;
+ 表示make始终执行本命令行;
@ 执行本命令行时不在屏幕中输出显示。
建立makefile之后,就可以调用make命令生成和维护目标文件了。其格式为:
Make [make工作行为] [宏] [需要更新的文件列表]
make工作行为
例如make工作行为 –f filename 表示使用指定的文件作为makefile
Make –f example.mk proc1.o proc2.o
表示只对pro1.o pro2.o进行维护。
宏
优先级:make命令行>makefile中宏定义>shell中的宏>内定义宏
Makefile 有三个非常有用的变量:$@,$^,$<。其意义为:
$@:当前目标文件
$^:所有的依赖文件
$<:第一个依赖文件
$*:等于目标文件去掉后缀
$>:当目标文件是库文件时,就是表示该目标文件。
这部分功能很强大,但不利于理解。自己看书!!!!!!!!!!
库的建立和维护
使用库进行链接