考虑以下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
将执行,无论,如果文件发生了变化。< / p>
只有在make
实际更改后才能告诉my_output.file
运行download.zip
规则吗?
答案 0 :(得分:1)
使用强制规则技巧:
my_output.file: download.zip
some_expensive_operation
download.zip: FORCE
wget -N http://some.server/download.zip
FORCE: ;
(如果您愿意,可以声明.PHONY: FORCE
)。这样可以确保download.zip
的配方始终运行,但它本身并未标记为虚假,因此除非它被更改,否则不会重建依赖它的目标。