我知道 .PHONY 的作用。
如果在我的 Makefile 所在的文件夹中,我添加了一个名为 clean 的空文件,并且在我运行 make clean 之后所有的 clean 目标都不会被执行,因为文件中没有任何变化,所以目标不会运行,这是正确的。 如果我添加 .PHONY: clean,则 clean 被视为命令,这也是正确的。
我的问题是为什么这种行为不会发生在 all 目标上,因为我在文件夹中添加了一个 all 文件。所以基本上 all 目标仍然执行如果是 .PHONY: all
我有休闲的 makefile 代码。
all: test1 test2
test1: test1.o
test1.o: test1.c
test2: test2.o
test2.o: test2.c
clean:
rm -rf *.o test1 test2
最佳答案
你怎么知道 all
规则“仍在执行”?该规则没有配方,因此无法“执行”。
如果您的意思是即使 all
文件存在于本地目录中,make
仍在构建目标 test1
和 test2
,这就是 make 的工作原理(这与虚假目标与非虚假目标没有任何关系)。当 make 决定是否首先构建特定目标时,它会尝试构建该目标的所有先决条件,以及那些目标的所有先决条件,等等。只有在所有这些都完成之后,让
知道是否构建第一个目标(在本例中为all
)。
关于makefile - 为什么 "make all"没有将 "all"添加到 .PHONY 目标就按预期工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51225819/