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


Answers:


24

Clark Grubb的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行为。


1
风格指南上的精彩分享。谢谢。
tarabyte

2

我认为这是一个很好的做法,但是遵循以下规则,但即使在完整的规则食谱上也能对我的gmake(3.81)起作用之后,将其碎片化并放入碎片:

例如:

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

CMD:

$ touch all
$ make all    #this would be a no-op if all weren't a phoney target
  hello world 
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.