make中的“all”代表什么?

时间:2010-03-25 11:11:11

标签: makefile

我阅读了一些关于Makefile的教程,但对我来说,仍然不清楚目标“all”代表什么以及它的作用。

有什么想法吗?

4 个答案:

答案 0 :(得分:101)

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

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

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

    make file1.o
    

    如果需要,它只会构建该文件。

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

    all: executable1 executable2
    

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

    all通常也是.PHONY目标。了解详情here

答案 1 :(得分:25)

GNU Make手册为其list of standard targets中的all提供了明确的定义。

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

  1. 编译整个程序,但不构建文档。
  2. 成为默认目标。正如在make中运行一样,应与make all
  3. 相同

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

    .PHONY : all
    all : executable
    

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

    .DEFAULT_GOAL := all
    

答案 2 :(得分:2)

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

答案 3 :(得分:1)

目标“all”是虚拟目标的一个示例 - 磁盘上没有任何名为“all”的内容。这意味着当你执行“make all”时,make总是认为它需要构建它,因此执行该目标的所有命令。这些命令通常是构建makefile知道的所有最终产品的命令,但它可以做任何事情。

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

如果您尚未阅读,请阅读GNU Make Manual,这也是一本优秀的教程。