.PHONY在makefile中的用途是什么?
  .PHONY在Makefile中意味着什么?  我已经经历了这个,但它太复杂了。 
有人可以用简单的语言向我解释吗?
默认情况下,Makefile目标是“文件目标” - 它们用于从其他文件构建文件。 假定它的目标是一个文件,这使得编写Makefiles变得相对容易:
foo: bar
  create_one_from_the_other foo bar
  但是,有时您希望Makefile运行不代表文件系统中物理文件的命令。  很好的例子是“干净”和“全部”的共同目标。  有可能情况并非如此,但是您的主目录中可能会有一个名为clean的文件。  在这种情况下,Make会被混淆,因为默认情况下, clean目标将与该文件相关联,并且Make只会在文件看起来不是最新的依赖关系时运行它。 
这些特殊的目标被称为假,你可以明确地告诉他们没有与文件关联,例如:
.PHONY: clean
clean:
  rm -rf *.o
  现在,即使您有一个名为clean的文件, make clean也会按预期运行。 
  就Make而言,假目标只是一个总是过时的目标,所以无论何时你问make <phony_target> ,目标都会运行,与文件系统的状态无关。  一些常见的make是经常假目标是: all , install , clean , distclean , TAGS , info , check 。 
欲了解更多信息,这里有一个很好的教程解释它。
  假设你已经install目标,这在makefile中很常见。  如果您不使用.PHONY ,并且名为install的文件与Makefile位于同一目录中,那么make install将不会执行任何操作。  这是因为Make将规则解释为“执行这样的配方来创建名为install的文件”。  由于该文件已经存在,并且其依赖关系没有改变,所以不会做任何事情。 
  但是,如果您将install目标设为PHONY,它会告诉make工具该目标是虚构的,并且该make不应该期望它创建实际的文件。  因此它不会检查install文件是否存在,这意味着:a)如果文件存在并且b)不会调用额外的stat()则其行为不会被改变。 
  通常,Makefile中不生成与目标名称同名的输出文件的所有目标应该是PHONY。  这通常包括all , install , clean , distclean等。 
.PHONY: install
