【问题标题】:.PHONY usage in makefile.PHONY 在 makefile 中的使用
【发布时间】:2024-10-03 04:40:02
【问题描述】:

在 makefile 中搜索.PHONY 的用法时,我遇到了this,上面写着类似

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

我将该帖子中提到的示例放在了一个 makefile 中,我运行了它,但它没有向我显示 OP 中提到的任何错误。谁能详细介绍一下?

生成文件

target1: dostuff

.PHONY: target2
target2: dostuff



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

O/P

[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]$

根据 OP,make target1 应该会抛出错误。请指教。

一些信息

[sourav@titan temp]$ uname -r
2.6.18-194.el5PAE
[sourav@titan temp]$ make --version
GNU Make 3.81
[sourav@titan temp]$

【问题讨论】:

  • 那条评论是错误的。
  • [PDF文件入站]gnu.org/software/make/manual/make.pdf部分4.5
  • @dbw 先生,我是 linux 新手。你能解释一下吗?
  • 他将您链接到制作手册,您可以在其中了解 .PHONY 的工作原理。为了澄清@MadScientist 的评论,评论的海报是错误的。无论.PHONY如何,make都允许没有规则的目标。 make 不会抛出该评论的发布者指出的错误,正如您的测试所显示的那样。

标签: makefile


【解决方案1】:

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

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

【讨论】:

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