Makefile仅当文件不存在时才执行文件的假目标

Makefile仅当文件不存在时才执行文件的假目标,makefile,dependencies,Makefile,Dependencies,有没有办法我只能执行文件的虚假依赖项 如果此文件不存在 如果文件没有虚假的依赖项,它将工作并只执行内容 这条规则的一部分。但是,如果我添加一个虚假目标作为依赖项,它将继续执行依赖项规则和生成现有文件的规则 我简化了生成文件,以便您可以看到我的问题: .PHONY: phonytarget all clean all: $(CURDIR)/a.a @echo done $(CURDIR)/a.a: phonytarget @touch $@ phonytarget:

有没有办法我只能执行文件的虚假依赖项 如果此文件不存在

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

我简化了生成文件,以便您可以看到我的问题:


.PHONY: phonytarget all clean

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

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

phonytarget:
    @echo what the heck is wrong with you
使用:

但是,有时您会遇到这样的情况,即希望对要调用的规则施加特定的顺序,而不必在执行其中一个规则时强制更新目标。在这种情况下,您需要定义仅限订单的先决条件。通过在“先决条件”列表中放置管道符号(
|
),可以指定仅订购先决条件:管道符号左侧的任何先决条件都是正常的;右侧的任何先决条件仅适用于以下顺序:

targets : normal-prerequisites | order-only-prerequisites
当然,正常先决条件部分可能为空。此外,您仍然可以为同一目标声明多行先决条件:它们被适当地追加(普通先决条件被追加到普通先决条件列表中;仅订单先决条件被追加到仅订单先决条件列表中)


每次运行代码时,make 4.2.1仍然会显示“你的黑客有什么问题”
.PHONY: phonytarget all clean

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

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

phonytarget:
    @echo what the hack is wrong with you