如何编写Makefile:当目标依赖的未构建脚本修改时自动重建
解决Makefile中脚本修改不触发重建的问题
要让Make在脚本文件修改时自动重建对应目标,核心是把脚本显式添加到目标的依赖列表中——Make只会追踪目标依赖列表里的文件变化,命令中隐式用到的文件不会被自动监测。
针对你给出的示例Makefile:
all: obj.bin ./script.sh obj.bin $@ %.bin: %.o [...]
这里all目标的命令依赖script.sh,但脚本没被列入依赖,所以修改script.sh不会触发重建。只需把script.sh加到all的依赖中即可:
all: obj.bin script.sh ./script.sh obj.bin $@ %.bin: %.o [...]
扩展场景处理
脚本是多个目标的共用工具
如果多个目标都依赖同一个脚本,可以用变量统一管理,方便后续维护:# 定义脚本变量 BUILD_SCRIPT = script.sh all: obj.bin $(BUILD_SCRIPT) ./$(BUILD_SCRIPT) obj.bin $@ test.bin: test.o $(BUILD_SCRIPT) ./$(BUILD_SCRIPT) test.o $@脚本用于生成目标文件
如果脚本是生成.bin文件的直接步骤(比如%.bin的命令里调用了脚本),则需要把脚本加到%.bin的依赖中:all: obj.bin %.bin: %.o script.sh ./script.sh $< $@ # 用脚本从.o生成.bin
修改后,只要script.sh的内容或修改时间发生变化,Make就会自动触发对应目标的重建操作。
内容的提问来源于stack exchange,提问作者Llamageddon
相关产品推荐
相关产品推荐

