make中的"all"代表什么?

Chr*_*ian 97 makefile

我阅读了一些关于Makefile的教程,但对我而言,目标"所有"代表什么以及它的作用仍然不清楚.

有任何想法吗?

P S*_*ved 109

正如Makefile所理解的那样,构建包含许多目标.例如,构建您可能需要的项目

  1. 从file1.c构建file1.o
  2. 从file2.c构建file2.o
  3. 从file3.c构建file3.o
  4. 从file1.o和file3.o构建executable1
  5. 从file2.o构建executable2

如果使用makefile实现此工作流,则可以单独创建每个目标.例如,如果你写了

make file1.o
Run Code Online (Sandbox Code Playgroud)

如果有必要,它只会构建该文件.

名称all不固定.这只是一个传统的名字; alltarget表示如果你调用它,make将构建完成构建所需的所有内容.这通常是一个虚拟目标,它不会创建任何文件,而只取决于其他文件.对于上面的示例,构建所有必需的是构建可执行文件,其他文件作为依赖项被拉入.所以在makefile中它看起来像这样:

all: executable1 executable2
Run Code Online (Sandbox Code Playgroud)

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

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


Pet*_*rSW 28

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

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

  1. 编译整个程序,但不构建文档.
  2. 成为默认目标.因为在跑步中make应该做同样的事情make all.

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

.PHONY : all
all : executable
Run Code Online (Sandbox Code Playgroud)

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

.DEFAULT_GOAL := all
Run Code Online (Sandbox Code Playgroud)


Jus*_*eff 7

不确定它代表什么特别的东西。这只是您提供“all”规则的约定,通常它用于列出构建整个项目所需的所有子目标,因此名称为“all”。它唯一的特别之处在于,人们常常将其作为 makefile 中的第一个目标,这意味着仅输入“make”将执行与“make all”相同的操作。