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

GNU Make规则问题:目标未更新仍复制文件如何修复?

修复Makefile的执行逻辑问题

你的问题出在move规则的定义上:当前move是一个没有实际目标文件的规则,Make会默认将其视为需要每次都执行的伪目标,哪怕generated/effect.cpp没有更新。要实现仅当源文件更新时才复制的逻辑,需要把规则目标明确设为src/effect.cpp,让Make通过对比源文件和目标文件的时间戳来判断是否执行复制。

修改后的Makefile如下:

.PHONY: gen create

gen: create src/effect.cpp

create:
	cd generated && ./builder.sh build

src/effect.cpp: generated/effect.cpp
	cp $< $@

关键修改点说明:

  • 用.PHONY: gen create标记gen和create为伪目标,确保每次执行make gen时都会运行create规则(不管是否存在同名文件)。
  • 将原move规则的目标替换为src/effect.cpp,让Make自动对比generated/effect.cpp(依赖)和src/effect.cpp(目标)的修改时间:只有当generated/effect.cpp的时间戳晚于src/effect.cpp时,才会执行cp命令。
  • $<是Make的自动变量,代表第一个依赖文件(即generated/effect.cpp);$@代表目标文件(即src/effect.cpp),用自动变量让规则更简洁通用。

这样修改后,每次执行make gen都会先运行builder.sh,然后只有当generated/effect.cpp确实更新时,才会复制到src目录。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 13:32:02