Make:仅在第一次更改文件时执行第二条规则

时间:2015-10-26 15:06:24

标签: makefile gnu-make

考虑以下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规则吗?

1 个答案:

答案 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的配方始终运行,但它本身并未标记为虚假,因此除非它被更改,否则不会重建依赖它的目标。