makefile - 导出带有美元符号的 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'
解决方案
这是手动传递变量的解决方案:
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 '...'
推荐阅读
- javascript - 如何让JS信息转到php生成文本文件?
- wordpress - WordPress 数据导出问题
- python - 使用 python-vlc 同时播放多个音频/视频文件
- html - 外部 Css 文件未链接到 HTML 页面 - 刷新不起作用(请参阅编辑以获取解决方案)
- java - 如何减去和计算文件中的时间戳?
- php - 如何在 PHP 中的 Stack Trace 中查找错误?
- c# - 检索包含数据的对象列表以及连接中的行数
- python - 如何从 XML 文件中提取值?
- php - 在 MySQL 中将数组存储在多行中
- python - Python - np.inf 不大于数字