Makefile中的“ all”代表什么?


105

我阅读了一些有关Makefile的教程,但是对我来说,目标“全部”代表什么以及它的作用还不清楚。

有任何想法吗?

Answers:


116

根据Makefile的理解,构建包含许多目标。例如,要构建一个项目,您可能需要

  1. 从file1.c中构建file1.o
  2. 从file2.c中构建file2.o
  3. 从file3.c中构建file3.o
  4. 从file1.o和file3.o构建可执行文件1
  5. 从file2.o构建可执行文件2

如果使用makefile来实现此工作流程,则可以分别创建每个目标。例如,如果您写了

make file1.o

它只会在必要时构建该文件。

的名称all不固定。这只是一个常规名称; alltarget表示,如果您调用它,make将构建完成完整构建所需的所有内容。通常这是一个虚拟目标,它不创建任何文件,而仅依赖于其他文件。对于上面的示例,构建所有必需文件就是构建可执行文件,而其他文件则作为依赖文件被引入。因此,在makefile中,它看起来像这样:

all: executable1 executable2

alltarget通常是makefile中的第一个目标,因为如果您仅make在命令行中编写而不指定目标,则它将构建第一个目标。而且您希望它是all

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


31

GNU Make的手册all在其标准目标列表中给出了明确的定义。

如果Makefile的作者遵循该约定,则目标all应:

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

all通常将达到1 定义为.PHONY目标,该目标取决于构成整个程序的可执行文件:

.PHONY : all
all : executable

要达到2 all,要么应该是make文件中定义的第一个目标,要么应指定为默认目标:

.DEFAULT_GOAL := all

3

不知道它代表什么特别的东西。提供一个“全部”规则只是一个惯例,通常用于列出构建整个项目所需的所有子目标,因此命名为“全部”。唯一的特别之处在于,通常人们会把它作为makefile中的第一个目标放入,这意味着仅键入“ make”将与“ make all”做同样的事情。


2

目标“全部”是虚拟目标的示例-磁盘上没有任何东西称为“全部”。这意味着当您执行“全部创建”时,make始终认为它需要构建它,因此执行该目标的所有命令。这些命令通常是构建makefile知道的所有最终产品的命令,但是它可以执行任何操作。

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

如果您还没有阅读它,则应该阅读GNU Make Manual,这也是一本很好的教程。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.