具有多个目标的 Makefile:MAKECMDGOALS 优先处理

Makefiles with multiple targets: MAKECMDGOALS preferential treatment

我正在试验 Makefile,特别是包含多个 target

的 Makefile 规则

考虑这个 Makefile:

x := $(MAKECMDGOALS)
y := Whatever

dummy $(y) $(x) :
    @echo target: $@

在这里,一个简单的 make 调用输出 target: dummy,但是 make xyz 输出 target: xyz。为什么会这样? MAKECMDGOALS 变量有什么特别之处吗?为什么与 y 相比,变量 x 被处理 'with more importance'?

为什么会和MAKECMDGOALS有关系?这只是正常行为。

运行 这个 makefile,它根本不使用 MAKECMDGOALS 或变量,你会看到相同的结果:

dummy Whatever xyz:
        @echo target: $@

这是因为如果你不在命令行中给出任何目标,make 的默认目标是第一个,在本例中是 dummy。如果您确实给出了一个目标(例如 make xyz),那么这就是将要构建的目标。