makefile 学习(一)
时间:2014-04-29 10:48:46
收藏:0
阅读:326
1. 使用 makefile 的原因
假如每次都手动输入, 可能会写出这样的编译命令
1
2
3
4
5
6
7 |
gcc -c main.c gcc -c mytool1.c gcc -c mytool2.c gcc -o main main.o mytool1.o mytool2.o |
那么, 可不可以将这个命令写成 shell 脚本呢, 这样就不需要费事打命令了
但是, 使用脚本有一个弊端, 假设只有一个源文件被修改, 那么 shell 命令会把整个项目重新编译一遍
所以, 为了简化编译同时兼顾高效, make 命令应运而生, 但用 make 需要先编写 makefile 文件, makefile 告诉 make 编译规则
2. makefile 编写规则
makefile 注释以 # 开头
规则
target: componet // 第一行, 依赖关系
TAB rules // 第二行, 规则
一个 makefile 例子
1
2
3
4
5
6
7
8
9 |
#此行为注释 main: main.o mytool1.o mytool2.o gcc -o main main.o mytool1.o mytool2.o main.o: main.c mytool1.h mytool2.h gcc -c main.c mytool1.o: mytool1.c mytool1.h gcc -c mytool1.c mytool2.o: mytool2.c mytool2.h gcc -c mytool2.c |
3. makefile 文件的简化
三个常用变量
$@ 目标文件
$^ 所有依赖对象
$< 第一个依赖文件
有这三个变量, 上面的 makefile 可以简化为
1
2
3
4
5
6
7
8
9 |
#这是简化后的Makefile main: main.o mytool1.o mytool2.o gcc -o $@ $^ main.o: main.c mytool1.h mytool2.h gcc -c $< mytool1.o: mytool1.c mytool1.h gcc -c $< mytool2.o: mytool2.c mytool2.h gcc -c $< |
..c.o: makefile 的缺省规则, 这个规则表示所有的 .o 文件都依赖于响应的 .c 文件
这样, makefile 又可以简化为
1
2
3
4
5 |
#这是再一次简化后的Makefile main: main.o mytool1.o mytool2.o gcc -o $@ $^ ..c.o: gcc -c $< |
4. linux 下, makefile 编写带 boost 程序
Reference
[1] http://blog.csdn.net/livelylittlefish/article/details/3854220
[2]
评论(0)