Makefile 自动生成依赖关系对实际工程应用中的编译效率和可维护性,起着不可替代的作用。
在学习自动生成依赖关系的过程中,总结方法及所注意的事项如下:
-
通过gcc -MM和sed命令产生所有的依赖文件
通过gcc -MM 命令将所生成的依赖关系保存到指定的文件夹中,然后通过sed命令和正则表达式将所有的.o文件存放在指定的文件夹中。具体sed的操作如下:
$(CC) -MM -E $(filter %.c, $^) | sed ‘s,(.).o[ :],objs/\1.o $@ : ,g’ > $@ 正则表达式 :‘s,(.).o[ :],objs/\1.o $@ : ,g’ 将目录下的.o文件存放到指定的objs目录下,并将依赖关系存放在相应的文件夹中。 -
通过include包含所有的依赖文件
include关键字注意技巧之一:加上减号之后不仅关闭可警告信息还关闭了错误信息。
include关键字注意技巧之二:当包含的文件存在时,make的时候首先检查该文件有没有作为目标存在,如果作为目标存在就再次检查目标的依赖文件的时间戳是否比较新,是就执行该规则否则不执行。
include关键字注意技巧之三:当包含的文件不存在时,执行改文件名对应的规则,这时候会根据规则更新替换该文件的内容 -
使用filter关键字在编译的时候过滤不必要的.h文件。
-
makefile规则中的每个命令是在每个新的进程来进行执行的,当前命令执行结束会结束该命令的进程,然后重新开启新的进程来执行新的命令。
-
如果想要得到连续多个命令的执行结果可采用‘;’将命令隔开。
-
当遇到一个.