谈到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
他们两人都做同样的工作。
答案 0 :(得分:23)
如果您愿意,可以给他们打电话shirley
;你提到的标签都没有任何特殊的语义。 make
的默认行为是,如果未将目标指定为命令行参数,则运行Makefile
中的第一个目标。如果您想覆盖此行为,则会有.DEFAULT:
特殊目标。
有一个约定有一个名为all
的目标可以构建所有内容,但这只是人类约定,而不是特殊情况或者就Make而言是一个要求。
类似地,有一个(弱)约定来调用默认目标default
,但同样地,这只是一个人类标签(有些重叠,可能与all
约定冲突)。< / p>
所以下面的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
(并且您应该有一个具有此名称的目标,只是为了满足人类约定,即使它不是默认值)但这显然取决于您的项目和用户的期望。
不要叫我雪莉。
答案 1 :(得分:2)
一个拼写为“all”,另一个拼写为“default”。他们之间没有其他区别。也许如果你解释了为什么你要求我们能够帮助更多。
请注意,在上面的示例中,两个目标都不是虚假的。你必须这样声明它们:
.PHONY: all
等
答案 2 :(得分:1)
唯一的区别是,GNU Make手册中建议使用all
,作为第一个(默认)目标,default
没有这样的特殊建议。