修改Makefile后未触发所有文件重新编译的问题如何解决?
解决方案
问题根因是Make默认不会将Makefile本身纳入构建目标的依赖检查范围,因此修改Makefile不会触发目标重编译,只需将Makefile加入相关目标的依赖列表即可解决。
最简修改方式
无需改动原有编译规则,直接在Makefile中任意位置(建议放在all: app规则前)添加一行配置即可:
$(OBJECTS) $(TARGET): Makefile
效果验证
修改后再次按你给出的复现步骤测试:
- 执行
make clean清理旧产物 - 执行
make all完成首次编译 - 修改Makefile内容后再次执行
make all,此时会自动触发全量编译、链接流程,符合预期。
原理说明
添加该行配置后,所有中间.o文件和最终可执行文件的依赖项都包含了Makefile,Make执行时会比对Makefile与所有目标文件的修改时间:只要Makefile更新时间更晚,就会判定对应目标过期,触发重新生成流程,完全满足修改Makefile后自动全量重编的需求。
内容的提问来源于stack exchange,提问作者adixmasz
相关产品推荐
相关产品推荐

