导出带美元符号的 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 '...'
我有两个 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 '...'