首页 > 解决方案 > 导出带有美元符号的 makefile 变量

问题描述

我有两个 makefile,我想从 Makefile1 将一个变量传递给 Makefile2。

问题是这个变量有一个$内部。

这是文件:

# Makefile1
RPATH1 = 12\$$34
export RPATH1

all:
    @echo RPATH1 "(Makefile1)" $(RPATH1)
    @make -f Makefile2 RPATH2=$(RPATH1)


# Makefile2

all:
    @echo RPATH1 "(Makefile2)" $(RPATH1)
    @echo RPATH2 "(Makefile2)" $(RPATH2)

当我运行它时,我得到:

$ make -f Makefile1
RPATH1 (Makefile1) 12$34
make[1]: Entering directory '/tmp/make'
RPATH1 (Makefile2) 124
RPATH2 (Makefile2) 124
make[1]: Leaving directory '/tmp/make'

我也想有办法让 Makefile2 打印12$34

我可以做什么?

编辑:我发现了一些方法,但不是很一致。第一个 Makefile 中的用法与第二个不同。

# Makefile1
RPATH1 := '12$$$$34'
export RPATH1

all:
    @echo RPATH1 "(Makefile1)" $(RPATH1)
    @make -f Makefile2 RPATH2="$(RPATH1)"
    @make -f Makefile2 RPATH2="'12\$$\$$34'"


# Makefile2
all:
    @echo RPATH1a "(Makefile2)" $(value RPATH1)
    @echo RPATH2a "(Makefile2)" $(RPATH2)
    @echo RPATH2b "(Makefile2)" $(value RPATH2)


$ make -f Makefile1
RPATH1 (Makefile1) 12$$34
make[1]: Entering directory '/tmp/make'
RPATH1a (Makefile2) 12$$34
RPATH2a (Makefile2) 12151308134
RPATH2b (Makefile2) 12151308134
make[1]: Leaving directory '/tmp/make'
make[1]: Entering directory '/tmp/make'
RPATH1a (Makefile2) 12$$34
RPATH2a (Makefile2) 12$34
RPATH2b (Makefile2) 12$$34
make[1]: Leaving directory '/tmp/make'

标签: makefilegnu-make

解决方案


这是手动传递变量的解决方案:

override quote = '$(subst ','"'"',$1)'

all:
    @make -f Makefile2 RPATH2=$(call quote,$(value RPATH1))

此外,在 Make 变量定义 (in RPATH1) 中看到反斜杠和引号也很奇怪。

Make 自己会忽略它们,它们在打印变量时由 shell 解释。

您可能想要使用$(info )而不是echo,它不会转义。或者在打印时使用 my$(call quote, )来正确转义内容。


你能举一个完整的例子吗?

当然。

# Makefile1
RPATH1 = 12\$$34'

override quote = '$(subst ','"'"',$1)'

all:
        $(info RPATH1 "(Makefile1)" $(RPATH1))
        @make -f Makefile2 RPATH2=$(call quote,$(value RPATH1))


# Makefile2

all:
        $(info RPATH2 "(Makefile2)" $(RPATH2))
        @true
$ make -f Makefile1
RPATH1 "(Makefile1)" 12\$34'
make[1]: Entering directory '...'
RPATH2 "(Makefile2)" 12\$34'
make[1]: Leaving directory '...'

推荐阅读