考虑以下 make
工作流程,我 (a) 想确保始终处理最新的 download.zip
文件,但 (b) 仅在该文件更改时运行其余的工作流:
my_output.file: download.zip
some_expensive_operation
download.zip:
wget -N http://some.server/download.zip
在这个例子中,wget
有依赖信息 make
没有。
如果download.zip
存在,则永远不会执行该规则并且 wget
永远不会检查是否有更新的文件可用。
我当然可以制作.PHONY: download.zip
到那时每次都执行规则some_expensive_operation
无论文件是否更改,也会被执行。
有什么办法告诉make
运行 my_output.file
仅当 download.zip
时才符合上述规则实际上改变了吗?
最佳答案
使用强制规则技巧:
my_output.file: download.zip
some_expensive_operation
download.zip: FORCE
wget -N http://some.server/download.zip
FORCE: ;
(或者您可以根据需要声明 .PHONY: FORCE
)。这可确保 download.zip
的配方始终运行,但它本身未标记为虚假,因此除非更改,否则不会重建依赖于它的目标。
关于makefile - 制作 : execute 2nd rule only if 1st changed file,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33349078/