仅当文件不存在时,Makefile才会执行文件的伪目标

时间:2012-01-25 17:18:50

标签: makefile dependencies

有什么办法我只能执行文件的虚假依赖 如果这个文件不存在?

如果文件没有虚假依赖,则它可以工作,只执行内容 这个规则。但是如果我将伪目标添加为依赖,它会继续执行依赖规则和生成现有文件的规则。

我简化了我的Makefile,以便您可以看到我的问题:

 
.PHONY: phonytarget all clean

all: $(CURDIR)/a.a
    @echo done

$(CURDIR)/a.a: phonytarget
    @touch $@

phonytarget:
    @echo what the heck is wrong with you
 

1 个答案:

答案 0 :(得分:8)

使用order-only prerequisites

  

但是,有时您可能希望对要调用的规则强制执行特定排序,而不强制在执行其中一个规则时更新目标。在这种情况下,您希望定义仅订单的先决条件。可以通过在先决条件列表中放置管道符号(|)来指定仅订单的先决条件:管道符号左侧的任何先决条件都是正常的;右边的任何先决条件都是仅限订单:

targets : normal-prerequisites | order-only-prerequisites
     

正常的先决条件部分当然可能是空的。此外,您仍然可以为同一目标声明多行先决条件:它们被适当地附加(正常先决条件被附加到正常先决条件列表;仅订单先决条件被附加到仅订单先决条件列表中)。

.PHONY: phonytarget all clean

all: $(CURDIR)/a.a
    @echo done

$(CURDIR)/a.a: | phonytarget
    @touch $@

phonytarget:
    @echo what the hack is wrong with you