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]
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步