我的解释是否错误,我基本上应该把所有制定规则放在第一位:
.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