Makefile 带来的好处就是“自动化编译” ,一旦写好,只需要一个 make 命令,整
个工程完全自动编译,极大的提高了软件开发的效率。 make 是一个命令工具,是一个解释 Makefile 文件中指令的命令工具。
Makefile 的命名规则:
目标: ... 依赖...
命令
目标:生成的文件名
依赖:生成目标所需要的文件或是目标
命令:通过执行命令对依赖操作生成目标(命令前必须 Tab 缩进)
工作原理:
执行命令
执行命令之前,检查依赖->存在->执行该命令
执行命令之前,检查依赖->不存在->向下查找其他规则(
检查有没有一个规则是用来生成这个依赖的)->找到了->执行该命令
其他情况则不执行。
Makefile 中的其它规则一般都是为第一条规则服务的。
检查更新
比较目标与依赖文件的时间
(1)目标时间晚于依赖->不更新
(2)目标时间早于依赖->更新
举个例子:
![](https://i-blog.csdnimg.cn/blog_migrate/4100a416cefff1068af6ebe5df6e4bc6.png)
图片中main.o 在执行 gcc main.c -c -o main.o 后才会生成,时间main.o晚于main.c,这个是正常下的情况;
如果在sub.c文件里面添加一些代码,这个时候main.c已经是最新的了,和之前main.o相比时间已经比之前sub.o晚了,这个时候makefie则会更新。
再使用make 则会先去更新main.o
![](https://i-blog.csdnimg.cn/blog_migrate/b706093147313dfbf227b4b791e74d54.png)
Makefile里面添加了变量和函数用来简化程序员的日常工作;
![](https://i-blog.csdnimg.cn/blog_migrate/0cbcf41d6702b80d3e7cd07d46770439.png)
这个效果和第一张图片实现的功能一样
![](https://i-blog.csdnimg.cn/blog_migrate/c40e62c13c5255730b828dce2178130a.png)
模式匹配:
改进后与第一张图片功能一样:
函数:
改进后2.0: