.PHONY GNU make 文件中的所有规则?

.PHONY GNU make 文件中的所有规则?

我的解释是否错误,我基本上应该把所有制定规则放在第一位:

.PHONY: all of my rules

all:
    echo "Executing all ..."

of:
    echo "Executing of ..."

my:
    echo "Executing my ..."

rules:
    echo "Executing rules ..."

是否有过您不想遵循这个“公式”的情况?

http://www.gnu.org/software/make/manual/make.html#Phony-Targets

答案1

克拉克·格拉布的Makefile 风格指南建议:

  • 所有虚假目标都应通过使其成为 .PHONY 的先决条件来声明。
  • 在目标声明之前添加每个虚假目标作为 .PHONY 的先决条件,而不是在一个位置列出所有虚假目标。
  • 任何文件目标都不应成为 .PHONY 的先决条件。
  • 虚假目标不应成为文件目标的先决条件。

对于您的示例,这意味着:

.PHONY: all
all:
    echo "Executing all ..."

.PHONY: of
of:
    echo "Executing of ..."

.PHONY: my
my:
    echo "Executing my ..."

.PHONY: rules
rules:
    echo "Executing rules ..."

PHONY允许多个目标;另请参阅这个堆栈溢出问题:“gnu makefile 中是否可以有多个 .PHONY 目标?”

另外,虽然您的问题中没有直接提到这一点,但必须注意不要让PHONY目标与项目中的实际输入或中间文件同名。例如,如果您的项目假设有一个名为rules(没有后缀)的源代码文件,则在目标中包含该字符串PHONY可能会破坏预期的make行为。

答案2

我认为这是一个很好的实践,但将其分段并在完整的规则配方之后放置片段也适用于我的 gmake (3.81):

例如:

#Makefile
all:
   @echo hello world
.PHONY: all

命令:

$ touch all
$ make all    #this would be a no-op if all weren't a phoney target
  hello world 

相关内容