在makefile中,“all”代表什么?
我阅读了关于Makefiles的一些教程,但是对于我来说目标“all”代表的是什么以及它做了什么还不清楚。
有任何想法吗?
构build,就像Makefile所理解的那样,由许多目标组成。 例如,build立一个你可能需要的项目
- 从file1.c中构buildfile1.o
- 从file2.c中构buildfile2.o
- 从file3.c中构buildfile3.o
- 从file1.o和file3.o中生成可执行文件1
- 从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的作者遵循这个约定,那么目标应该是:
- 编译整个程序,但不能编译文档。
-  成为默认的目标。 就像在跑步刚刚做的一样,做一样的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手册 ,这也是一个很好的教程。