You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何编写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
[...]

扩展场景处理

  1. 脚本是多个目标的共用工具
    如果多个目标都依赖同一个脚本,可以用变量统一管理,方便后续维护:

    # 定义脚本变量
    BUILD_SCRIPT = script.sh
    
    all: obj.bin $(BUILD_SCRIPT)
        ./$(BUILD_SCRIPT) obj.bin $@
    
    test.bin: test.o $(BUILD_SCRIPT)
        ./$(BUILD_SCRIPT) test.o $@
    
  2. 脚本用于生成目标文件
    如果脚本是生成.bin文件的直接步骤(比如%.bin的命令里调用了脚本),则需要把脚本加到%.bin的依赖中:

    all: obj.bin
    
    %.bin: %.o script.sh
        ./script.sh $< $@  # 用脚本从.o生成.bin
    

修改后,只要script.sh的内容或修改时间发生变化,Make就会自动触发对应目标的重建操作。

内容的提问来源于stack exchange,提问作者Llamageddon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 08:47:23