导出带美元符号的 makefile 变量

Export makefile variable with dollar sign

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

问题是这个变量里面有一个$

这是文件:

# Makefile1
RPATH1 = 12$
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
make[1]: Entering directory '/tmp/make'
RPATH1 (Makefile2) 124
RPATH2 (Makefile2) 124
make[1]: Leaving directory '/tmp/make'

我也想有办法打印 Makefile2 12

我可以做什么?

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

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

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


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


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

这里有一个手动传递变量的解决方案:

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

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

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

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

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


Could you put a complete example?

当然可以。

# Makefile1
RPATH1 = 12$'

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

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 '...'