Makefile中的.PHONY用法

5
当我在查找 makefile 中使用 .PHONY 的用法时,我看到了这个帖子,它说了以下内容:

.PHONY 还允许您拥有没有相关规则的目标

我在一个 makefile 文件中尝试了这篇文章中提到的例子,但是并没有像原帖中提到的那样显示任何错误。请问有谁能详细解释一下吗?

该 makefile 文件如下:

target1: dostuff

.PHONY: target2
target2: dostuff



dostuff:
        @echo "Stuff gets done!!!!"

输出

[sourav@titan temp]$ make target1
Stuff gets done!!!!
[sourav@titan temp]$ make target2
Stuff gets done!!!!
[sourav@titan temp]$ make
Stuff gets done!!!!
[sourav@titan temp]$

根据原帖,make target1 应该会抛出一个错误,请解释一下。
一些信息:
[sourav@titan temp]$ uname -r
2.6.18-194.el5PAE
[sourav@titan temp]$ make --version
GNU Make 3.81
[sourav@titan temp]$

2
那个注释是错误的。 - MadScientist
1
[PDF文件传入] http://www.gnu.org/software/make/manual/make.pdf 第4.5节 - user2485710
@dbw先生,我是Linux的新手。你能解释一下吗? - Sourav Ghosh
他向您提供了Make手册的链接,您可以在其中阅读.PHONY如何工作的相关信息。为了澄清@MadScientist的评论,评论发表者是错误的。无论是否使用.PHONY,make都可以很好地处理没有规则的目标。正如您的测试所显示的那样,make不会像评论者所指示的那样抛出错误。 - Etan Reisner
1个回答

3

没错。一个.PHONY目标可以只有依赖项,而没有任何规则。在这种情况下,make不会执行任何规则,但会检查依赖项是否满足(如果不满足,则执行它们的规则)。

因此,在你的例子中,target1target2都调用dostuff是正确的,因为它是一个依赖项。


为什么会出现错误?根据文档,虚拟目标(如“target1”)可以有或没有规则。在您的情况下,“target1”没有规则,它只有依赖关系。但这不是一个错误。 - Claudio

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接