【发布时间】:2011-01-31 16:13:33
【问题描述】:
我阅读了一些有关 Makefile 的教程,但对我来说,目标“all”代表什么以及它的作用仍然不清楚。
有什么想法吗?
【问题讨论】:
标签: makefile
我阅读了一些有关 Makefile 的教程,但对我来说,目标“all”代表什么以及它的作用仍然不清楚。
有什么想法吗?
【问题讨论】:
标签: makefile
不确定它代表什么特别的东西。这只是您提供“全部”规则的约定,通常它用于列出构建整个项目所需的所有子目标,因此名称为“全部”。唯一的特别之处在于,人们通常会将它作为 makefile 中的第一个目标,这意味着仅键入“make”将与“make all”执行相同的操作。
【讨论】:
目标“all”是一个虚拟目标的例子——磁盘上没有任何东西叫做“all”。这意味着当您执行“make all”时,make 总是认为它需要构建它,因此执行该目标的所有命令。这些命令通常是构建 makefile 知道的所有最终产品的命令,但它可以做任何事情。
虚拟目标的其他示例是“干净”和“安装”,它们的工作方式相同。
如果你还没有阅读,你应该阅读GNU Make Manual,这也是一个很好的教程。
【讨论】:
按照 Makefile 的理解,构建包含许多目标。例如,要构建您可能需要的项目
如果您使用 makefile 实现了此工作流程,则可以分别创建每个目标。例如,如果你写了
make file1.o
它只会在必要时构建该文件。
all 的名称不固定。这只是一个传统的名称; all 目标表示如果您调用它,make 将构建所有构建完整构建所需的内容。这通常是一个虚拟目标,它不会创建任何文件,而只是依赖于其他文件。对于上面的示例,构建 all 是构建可执行文件,其他文件作为依赖项被拉入。所以在makefile中它看起来像这样:
all: executable1 executable2
all 目标通常是 makefile 中的第一个目标,因为如果您只是在命令行中写入make,而不指定目标,它将构建第一个目标。你希望它是all。
all 通常也是一个.PHONY 目标。了解更多here。
【讨论】:
GNU Make 手册在其list of standard targets 中对all 给出了明确的定义。
如果 Makefile 的作者遵循该约定,那么目标 all 应该:
make 一样,应该和 make all 一样。要实现 1 个all,通常定义为 .PHONY 目标,该目标取决于构成整个程序的可执行文件:
.PHONY : all
all : executable
要实现 2 all 应该是在 make 文件中定义的第一个目标,或者被指定为默认目标:
.DEFAULT_GOAL := all
【讨论】: