就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
它们两个都完成相同的工作。
make
的默认行为是运行Makefile
中的第一个目标。如果你想覆盖这个行为,可以使用.DEFAULT_GOAL
这个特殊变量。all
的目标来构建所有内容,但这只是人为的约定,并不是Make所关心的特殊情况或要求。default
,但同样,这只是一个人为的标签(可能与all
约定有重叠和冲突)。.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)
all
作为第一个(默认)目标,而default
没有这样的特殊推荐。.PHONY: all
etc.
all
和default
规则没有特殊含义,它们只是普通规则,有普通的名称。 - Dettorer
.DEFAULT
特殊目标不是覆盖默认目标的方法。默认目标是Makefile中第一个不以点号开头的规则,除非指定了特殊变量.DEFAULT_GOAL
覆盖它。为了告知读者一个非常长的Makefile,最好要么指定.DEFAULT_GOAL
,要么在Makefile开头编写一个规则(通常是一个名为default: all
的虚拟规则,没有配方)。 - David Hammen.DEFAULT_GOAL
黑客攻击主要是一种玄学后门,也许应该避免使用,手册中关于如何使用它的示例肯定会加强这种印象。 - tripleee.DEFAULT
特殊目标显然是另一回事。 - undefined