所以,在
#
函数中使用它时,必须在 Makefile 中转义 $(shell
,如下所示:
FOO2 := $(shell echo '\#' | cat)
$(info FOO2: $(FOO2))
否则,在旧的
make
中你会得到一个*** unterminated call to function 'shell': missing ')'.
错误。
上面用旧的
make
打印以下内容:
FOO2: #
但它在新的
make
中打印以下内容:
FOO2: \#
这使得 shell 脚本的语义根据所使用的
make
版本而有所不同。
但是您如何做到这一点,以便变量
FOO2
在旧版本和新版本中运行时获得相同的值?
好吧,前方严重的面部表情:
首先你必须做
HASH := \#
因为显然,虽然
$(shell
的转义规则改变了,但普通变量赋值的规则 didn't 改变了!
那你必须
FOO2 := $(shell echo '$(HASH)' | cat)
$(info FOO2: $(FOO2))
:捂脸: