【问题标题】:What does "all" stand for in a makefile?makefile 中的“all”代表什么?
【发布时间】:2011-01-31 16:13:33
【问题描述】:

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

有什么想法吗?

【问题讨论】:

    标签: makefile


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

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

      如果你还没有阅读,你应该阅读GNU Make Manual,这也是一个很好的教程。

      【讨论】:

        【解决方案3】:

        按照 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 的名称不固定。这只是一个传统的名称; all 目标表示如果您调用它,make 将构建所有构建完整构建所需的内容。这通常是一个虚拟目标,它不会创建任何文件,而只是依赖于其他文件。对于上面的示例,构建 all 是构建可执行文件,其他文件作为依赖项被拉入。所以在makefile中它看起来像这样:

        all: executable1 executable2
        

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

        all 通常也是一个.PHONY 目标。了解更多here

        【讨论】:

          【解决方案4】:

          GNU Make 手册在其list of standard targets 中对all 给出了明确的定义。

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

          1. 编译整个程序,但不构建文档。
          2. 成为默认目标。就像运行 make 一样,应该和 make all 一样。

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

          .PHONY : all
          all : executable
          

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

          .DEFAULT_GOAL := all
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2012-08-31
            • 1970-01-01
            • 1970-01-01
            • 2021-03-18
            • 2014-09-06
            • 2017-09-07
            相关资源
            最近更新 更多