如何在 Makefile shell 函数中转义“#”,使其在新旧 make 中都能正常工作?

问题描述 投票:0回答:1

所以,在

#
函数中使用它时,必须在 Makefile 中转义
$(shell
,如下所示:

FOO2 := $(shell echo '\#' | cat)
$(info FOO2: $(FOO2))

否则,在旧的

make
中你会得到一个
*** unterminated call to function 'shell': missing ')'.
错误。

上面用旧的

make
打印以下内容:

FOO2: #

但它在新的

make
中打印以下内容:

FOO2: \#

这使得 shell 脚本的语义根据所使用的

make
版本而有所不同。

但是您如何做到这一点,以便变量

FOO2
在旧版本和新版本中运行时获得相同的值?

makefile gnu-make
1个回答
0
投票

好吧,前方严重的面部表情:

首先你必须做

HASH := \#

因为显然,虽然

$(shell
的转义规则改变了,但普通变量赋值的规则 didn't 改变了!

那你必须

FOO2 := $(shell echo '$(HASH)' | cat)
$(info FOO2: $(FOO2))

:捂脸:

© www.soinside.com 2019 - 2024. All rights reserved.