make clean的必要性&自动找寻头文件
本人初学 makefile,对此问题有认识不足之处,烦请在评论区指出错误或补充您的观点,谢谢。
什么时候必须 make clean
?
当依赖文件中没有显式写出头文件时,如果仅改动了头文件,那么必须 make clean
。否则不会重新编译,如下:
1 | #######################mekefile |
先 make
依次,成功。在 make
一次,提示:make: 'calc.exe' is up to date.
。然后将 add.h 改为如下:
1 |
|
然后再 make
,仍然提示:make: 'calc.exe' is up to date.
,说明 make 没有检测 add.h 的变动。此时 make clean
,接着 make
,就会报错,提示函数定义和函数原型对不上号:
以上情况就体现了 make clean
的必要性。
如果想及时追踪到头文件的改动,就必须把头文件纳入依赖:
1 | vpath %.c ./src |
但这又会引入另一个新的问题:如果是一个比较大型的工程,你必需清楚哪些 C 文件包含了哪些头文件,并且,你在加入或删除头文件时,也需要小心地修改 Makefile,这是一个很没有维护性的工作。所以,我们可以让 make 自动找寻源文件中包含的头文件,并生成一个依赖关系。gcc/g++ 编译器有命令:gcc -MM file
,可以生成 file
文件中使用的头文件的路径,还是拿上面的例子说明:
1 | $ gcc -MM ./src/main.c |
还没学完,后续补充。。。。
详细内容:https://seisman.github.io/how-to-write-makefile/rules.html
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 极简!
评论