在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手册 ,这也是一个很好的教程。