makefile - 制作 : execute 2nd rule only if 1st changed file

标签 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 无论文件是否更改,也会被执行。

有什么办法告诉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/

相关文章:

xcode - Xcode 中的 GNU make

c++ - 有哪些 Makefile 生成工具?

linux - Ubuntu :/usr/bin/ld: cannot find -llog 编译错误

c - 如何将宏定义作为参数传递给 make?

makefile - 为什么这个 makefile 无限循环,但只在一台机器上?

makefile - $(VARIABLE) 和 % 模式规则之间的差异

c - 如何解决 'undefined reference to pow'(已与 -lm 链接)?

vim - 如何在vim中显示实际的语法高亮?

linux - 如果编译器选项与以前使用的选项不同,则使目标过时

c++ - 使用配置文件部署可执行文件