如何用GNU Make在多行变量中打印美元符号

时间:2014-07-25 09:51:39

标签: makefile gnu-make

我正在使用下面的示例Makefile根据VAR值打印SCRIPT_BODY:

define SCRIPT_BODY
begin
    foo=$(VAR)
end
endef
export SCRIPT_BODY

.PHONY: all
all:
        $(MAKE) body VAR='$$bar'

.PHONY: body
body:
        @echo "$$SCRIPT_BODY"

问题是我得到以下输出

begin
    foo=ar
end

而不是

begin
    foo=$bar
end

有关如何打印美元符号的任何想法?

1 个答案:

答案 0 :(得分:1)

该问题与SCRIPT_BODY是一个多行变量无关:您使用SCRIPT_BODY=foo=$(VAR)获得相同的结果。事实上,$$bar会对make进行两次评估:一次分配VAR,一次分配SCRIPT_BODY,然后再将其导出到shell。第一次评估会导致$bar,因此第二次评估会导致ar,因为b不是Makefile的变量。您可以使用make:

value函数来阻止第二次评估
define SCRIPT_BODY
begin
    foo=$(value VAR)
end
endef