在makefile中,“all”代表什么?

我阅读了关于Makefiles的一些教程,但是对于我来说目标“all”代表的是什么以及它做了什么还不清楚。

有任何想法吗?

构build,就像Makefile所理解的那样,由许多目标组成。 例如,build立一个你可能需要的项目

  1. 从file1.c中构buildfile1.o
  2. 从file2.c中构buildfile2.o
  3. 从file3.c中构buildfile3.o
  4. 从file1.o和file3.o中生成可执行文件1
  5. 从file2.o生成可执行文件2

如果您使用makefile实现了这个工作stream程,则可以分别制作每个目标。 例如,如果你写了

make file1.o 

它只会build立该文件,如果有必要的话。

all的名字是不固定的。 这只是一个传统的名字, all目标都表示如果你调用它,make将会构build完成所需的所有东西 。 这通常是一个虚拟目标,它不会创build任何文件,而仅仅依赖于其他文件。 对于上面的例子,构build所有必要的是构build可执行文件,其他文件作为依赖关系被引入。 所以在makefile中看起来像这样:

 all: executable1 executable2 

all目标通常是makefile中的第一个目标,因为如果你只是在命令行写入make ,而不指定目标,它将会build立第一个目标。 你期望它是all

all通常也是一个.PHONY目标。 在这里了解更多。

GNU Make手册给出了标准目标列表中 all的清晰定义。

如果Makefile的作者遵循这个约定,那么目标应该是:

  1. 编译整个程序,但不能编译文档。
  2. 成为默认的目标。 就像在跑步刚刚做的一样,做一样的make all

要实现1, all通常被定义为一个.PHONY目标,依赖于形成整个程序的可执行文件:

 .PHONY : all all : executable 

实现2 all应该是make文件中定义的第一个目标,或者被指定为默认目标:

 .DEFAULT_GOAL := all 

不确定它代表什么特别的。 这只是一个惯例,你提供了一个“全部”规则,通常它被用来列出构build整个项目所需的所有子目标,因此名称为“全部”。 唯一特别的是人们经常把它作为makefile中的第一个目标,这意味着只要input'make'就可以做'make all'。

目标“全部”是一个虚拟目标的例子 – 磁盘上没有什么叫“全部”。 这意味着,当你做一个“全部制造”时,总是认为它需要build立它,并执行所有的目标命令。 这些命令通常是构buildmakefile知道的所有最终产品的命令,但它可以做任何事情。

虚拟目标的其他例子是“干净”和“安装”,他们以相同的方式工作。

如果你还没有阅读,你应该阅读GNU Make手册 ,这也是一个很好的教程。