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

添加多目标后Makefile同一目标覆盖问题的排查与解决

Makefile目标覆盖问题分析与修复

你的写法确实存在问题,核心原因是公共目标display被重复定义了。

每次调用TAR宏时,都会生成一段包含display:规则的代码,当targets有多个值(abc、xyz)时,foreach循环会触发两次eval,相当于你在Makefile里写了两遍完全一样的display规则:

display:
        @echo "XXXXXXXXXX"

虽然当前两次定义的规则内容完全一致,执行make abc时不会立刻出功能故障,但这是不符合Makefile规范的写法——重复定义同一个目标会让Make默认用最后一次定义的规则覆盖之前的,后续如果修改display的规则逻辑,很容易出现意料之外的覆盖问题。

另外还有个小细节:xxx-$(1):下面的命令行你用了空格缩进,Makefile要求规则里的命令必须用Tab键缩进,实际运行时会报错,这个也要注意。

修复后的代码

把公共的display目标从宏里抽出来,只定义一次,宏里只保留每个目标独有的规则即可:

targets: abc xyz

# 公共display目标只定义一次
display:
        @echo "XXXXXXXXXX"    

define TAR
$(1) : display xxx-$(1)

xxx-$(1):
        # 这里必须用Tab缩进,执行目标特定操作
        @echo "执行$(1)的专属操作"
        # 实际调用脚本可以写:./your-script.sh $(1)
endef

$(foreach x,$(targets),$(eval $(call TAR,$(x))))

这样修改后,执行make abc只会触发一次display,然后构建xxx-abc和abc,不会再出现目标覆盖的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 05:42:52