Makefile 符号 $= 是什么意思?

What does the Makefile symbol $= mean?

我已经搜索了 Make 和在线论坛的文档。我还搜索了 Bash 的文档。也许我错过了什么。

我有一个 makefile 包含

BUILD_SYSTEM :=$= build/make/core
BUILD_SYSTEM_COMMON :=$= build/make/common
include $(BUILD_SYSTEM_COMMON)/core.mk

$= 是什么意思?

你没有说明你使用的是哪个版本的 make,所以我假设使用的是符合标准 POSIX 的版本,例如 GNU make。

在 makefile 中,$x 对任何单个字符 x 表示扩展名为 x 的变量,极少数例外:$$ 扩展为单个 [ =17=、$(${表示变量名的开头。可能还有其他一些特殊的单个字符。

但除此之外,任何字符都可以是有效的变量名。所以 $= 扩展为变量 = 的值,就像 $a 扩展为变量 a 的值一样。这可能很难设置,因为只需使用:

= = foo

行不通。但是您可以使用另一个变量从 make 解析器中隐藏等号:

EQUAL = =
$(EQUAL) = foo
all: ; @echo $=

然后:

$ make
foo