参考了下面两篇文章,第二篇讲的更好,第一篇基本可以略过不看
https://www.jianshu.com/p/a512424793dc
https://www.cnblogs.com/cuckoos/articles/5049984.html
本人总结的include 指令的规则如下:
-
当目标文件不存在时
以文件名为查找规则,找到并执行
如果没找到,则报错
如果找到了,但没创建目标文件,然后就没有然后了 -
当目标文件不存在时
以文件名为查找规则,找到并执行
如果查找到的规则中创建了目标文件
将创建成功的目标文件包含进当前makefile,并且再次以文件名为查找规则,这次查找的范围包含了目标文件里的内容,只要目标文件有更新,这个动作就会进行,直到目标文件不再更新为止,看个例子
运行如下:
所以,如果代码写得有问题,会导致无限循环,比如下面这段代码 -
当目标文件存在
将目标文件包含进当前 makefile(注意:是先把文件include,然后再查找是否有对应规则)
以目标文件名查找是否有相应规则,查找的范围包含目标文件里的内容,只要目标文件有更新,这个动作就会进行,直到目标文件不再更新为止,看个例子:
运行如下: