谈到GNU make时,PHONY目标all:
和default:
之间有什么区别。Makefile:所有与默认目标
CC=g++
default: hello
hello: hello.cpp
$(CC) -o hello hello.cpp
和
CC=g++
all: hello
hello: hello.cpp
$(CC) -o hello hello.cpp
他们都做同样的工作。
谈到GNU make时,PHONY目标all:
和default:
之间有什么区别。Makefile:所有与默认目标
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:
特殊目标。
有一个约定有一个名为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
能够完成合理的最终用户所期望的操作,而不会读取太多的文件或检查Makefile
文件或检查文件或检查Makefile
文件或检查Makefile
。通常情况下,这将是make all
(为了满足人们的习惯,即使它不是默认设置,你也应该有一个这个名字的目标),但这显然取决于你的项目和用户的期望。
别叫我雪莉。
一个拼写为“all”,另一个拼写为“default”。他们之间没有其他区别。也许如果你解释了为什么你问我们可以提供更多帮助。
请注意,在您的示例中,上述两个目标都不是真正的假。你必须把他们定义为这样:
.PHONY: all
等
唯一的区别是,all
在GNU建议进行手动,成为第一个(默认)目标,并default
没有这样的特别推荐。
指定'.DEFAULT'特殊目标是**不是**重写默认目标的方法。默认目标是makefile中不是以'。'开头的第一条规则。 - 除非通过指定特殊变量'.DEFAULT_GOAL'来覆盖。为了通知读者很长的makefile文件,最好在makefile文件的早期指定.DEFAULT_GOAL或者编写一个规则(通常是一个虚拟的规则,比如'default:all',没有配方)。 – 2017-02-28 12:51:39
@DavidHammen我同意你的最终结论。但是,我认为'.DEFAULT_GOAL'黑客主要是应该避免的深奥后门,并且[手册](https://www.gnu.org/software/make/manual/html_node/Special-Variables。 HTML)如何使用它的例子肯定会强化这种印象。 – tripleee 2017-02-28 13:20:45