一尘不染

Makefile 中 .PHONY 的用途是什么?

javascript

Makefile 中 .PHONY 的用途是什么?


阅读 185

收藏
2022-02-10

共1个答案

一尘不染

默认情况下,Makefile 目标是“文件目标”——它们用于从其他文件构建文件。Make 假设它的目标是一个文件,这使得编写 Makefiles 相对容易:

foo: bar
  create_one_from_the_other foo bar

但是,有时您希望 Makefile 运行不代表文件系统中物理文件的命令。很好的例子是常见的目标“干净”和“全部”。情况并非如此,但您可能clean在主目录中有一个名为的文件。在这种情况下,Make 会感到困惑,因为默认情况下,clean目标将与此文件相关联,并且 Make 只会在文件的依赖项似乎不是最新的情况下运行它。

这些特殊目标被称为的,您可以明确告诉 Make 它们与文件无关,例如:

.PHONY: clean
clean:
  rm -rf *.o

即使make clean您确实有一个名为clean.

就 Make 而言,虚假目标只是一个总是过时的目标,因此无论何时询问make <phony_target>,它都会运行,与文件系统的状态无关。一些常见make的虚假目标是:all, install, clean, distclean, TAGS, info, check.

2022-02-10