【发布时间】:2011-12-01 01:09:36
【问题描述】:
我正在使用 bash 脚本动态生成 config.mk,Makefile 将使用该脚本。该文件由以下内容构成:
cat > config.mk <<CFG
SOMEVAR := $value_from_bash1
ANOTHER := $value_from_bash2
CFG
如何确保生成的文件确实包含$value_from_bash* 的内容,而不是扩展/解释的内容?我可能需要将$ 转义到$$ 和\ 到\\,但是还有其他字符需要转义吗?也许有一个我没听说过的特殊字面任务?
空格似乎也很麻烦:
$ ls -1
a b
a
$ cat Makefile
f := a b
default_target:
echo "$(firstword $(wildcard ${f}))"
$ make
a
如果我使用f := a\ b 它可以工作(使用f := 'a b' 之类的引号也不起作用,makefile 只是将其视为常规字符)
【问题讨论】:
-
你使用的是什么版本的 Make?
-
这不是 Makefile 问题,而是 bash 问题。我想你知道你希望你的 makefile 是什么样子,所以你的问题是在你的 bash here-document 中转义东西。看看这个tldp.org/LDP/abs/html/here-docs.html
-
不,我不是在问如何替换 bash 中的字符串,而是在不修改含义的情况下如何在 Makefile 中从 bash 获取字符串(例如,如果
echo "$var"显示"whatever \',则同样应该显示在 Makefile 中)