谈论 GNU make,PHONY 目标
all:
和 default:
之间有什么区别。
CC=g++
default: hello
hello: hello.cpp
$(CC) -o hello hello.cpp
和
CC=g++
all: hello
hello: hello.cpp
$(CC) -o hello hello.cpp
他们都做同样的工作。
如果您愿意,可以称呼他们为
shirley
;您提到的标签都没有任何特殊的语义。如果您未将目标指定为命令行参数,则 make
的默认行为是运行 Makefile
中的第一个目标。如果您想覆盖此行为,可以使用 .DEFAULT_GOAL
特殊变量。
有一个约定,即有一个名为
all
的目标来构建所有内容,但这只是人类约定,就 Make 而言不是特殊情况或要求。
类似地,有一个(弱)约定来调用默认目标
default
,但同样,这只是一个人类标签(并且与 all
约定有些重叠并可能冲突)。
因此以下 Makefile 执行完全相同的操作:
.PHONY: shirley all default
default: hello
all: hello
shirley: hello
hello: hello.cpp
# (Make already knows how to build an executable out of a .cpp file)
您可以省略上面的任何或所有虚假目标,唯一的区别是,当人们(实际上)表示
make shirley
时,他们将无法说 make hello
。
底线:构建您的 Makefile,以便
make
能够满足合理的最终用户的期望,而无需阅读太多 README
文件或检查 Makefile
。通常这将是 make all
(并且您可能应该有一个具有此名称的目标,只是为了满足人类约定,即使它不是默认值)但这显然取决于您的项目和用户的期望。
别叫我雪莉。
唯一的区别是,GNU Make 手册中推荐使用
all
作为第一个(默认)目标,而 default
没有这样的特别推荐。
一个拼写为“all”,另一个拼写为“default”。他们之间没有其他区别。也许如果您解释一下您提出问题的原因,我们就能提供更多帮助。
请注意,在上面的示例中,两个目标实际上都不是假的。你必须这样声明它们:
.PHONY: all
等等