首页 > 解决方案 > make 继续运行规则

问题描述

下面的工作示例总是在touch fileA每次运行make. 我怎样才能阻止这个?

all: analysis.txt

analysis.txt: countries
    touch $@

countries: usa.txt mexico.txt

$(countries): %.txt

%.txt:
    echo "bash ./cityGenerator $*" > $@

标签: makefilegnu-make

解决方案


fileA取决于workflowB。所以只要workflowB是过时的,fileA就会过时,touch就会运行。

workflowB,如此处所示,被标记.PHONY,所以它总是被认为是过时的,所以fileA总是会被重建。

即使不是.PHONY,也没有规则可以创建一个名为的文件workflowB,因此它仍然总是过时的。

至于如何阻止它,这完全取决于你没有告诉我们的这些事情做了什么,以及为什么你没有告诉我们你为什么要这样做workflowB

解决它的一种方法是删除.PHONY并提供workflowB一个涉及文件的配方,然后它将是最新的。:

workflowB: workflowB_files
        touch $@

但是,当然,这可能会破坏这个目的(同样,你没有告诉我们)。


推荐阅读