首页 > 解决方案 > 目标位置如何影响 makefile 的行为

问题描述

我写了一个简单的 Makefile 如下:

.PHONY: all A B
A:
    @echo "in target A"

B:
    @echo "in target B"

all: A B

输出是

in target A

但如果我修改 Makefile 如下:

.PHONY: all A B
all: A B

A:
    @echo "in target A"

B:
    @echo "in target B"

输出变成

in target A
in target B

我应该更仔细地阅读 Makefile 手册的哪一部分以了解其中的区别?

标签: makefile

解决方案


我应该更仔细地阅读 Makefile 手册的哪一部分以了解其中的区别?

要研究手册的哪一部分取决于make您正在阅读的手册,但对您观察到的行为的解释很简单:当您在make没有指定要构建make的目标的情况下运行时,构建默认目标,这是 makefile 中出现的第一个目标其名称不包含句点 ('.') 后跟大写字母。

特别是,目标名称“all”对make. 它的使用只是一个普遍的约定,并且要使all目标按您期望的方式工作(即,使其成为默认目标),它必须位于 makefile 中的第一个位置。有些 makefile 有一个“全部”目标,故意将其放置在其他地方,以便默认设置不同的目标。当它不是默认值时,您仍然可以显式构建它,当然,通过在命令行上命名它:make all.


推荐阅读