Makefile
0 引言
Makefile 是代码管理工具。之所以需要Makefile是因为gcc/g++有可能会写很长很长,容易出错。所以有人提出了一种代码管理工具,Makefile,即可完成代码管理工具。
通常Makefile是架构师写的,每个人只需要完成自己的部分即可。当然,如果能够读一点Makefile我觉得也是很有用的。
1 编写规则
1.1 makefile 三要素
a. 目标 b. 依赖 c. 命令
目标:依赖文件
tab: 命令
version1:
app: main.c add.c sub.c mul.c
gcc main.c add.c sub.c mul.c -o app
$ make # 执行Makefile中的命令
# 存在的问题:每次都得把所有的文件全部编译,造成时间浪费,进行修改得到version2
version2: app:main.o add.o sub.o mul.o gcc main.o add.o sub.o mul.o -o app main.o:main.c gcc -c main.c add.o:add.c gcc -c add.c mul.o:mul.c gcc -c mul.c sub.o:sub.c gcc -c sub.c # 如果有多条规则,默认第一条中的目标为终极目标
# 如果目标中涉及到的依赖没有,那么就继续访问Makefile找到其依赖生成的规则;通过向下检索,构建出一颗关系依赖树
# 这种方式可以将每个程序分开进行编译,提高了程序编译的效率;其原理是通过对比 *.c, *.o 的生成时间,来自动更新依赖树,实现只重新编译被修改过的文件,提高工作效率。
# 存在的问题:冗余
obj=main.o add.o sub.o mul.o target=app $(target):$(obj) gcc $(obj) -o $(target)
%.o:%.c
gcc -c $< -o $@