首页 > 代码库 > makefile 学习(一)
makefile 学习(一)
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]
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。