我正在编写一个为项目创建CMakeLists.txt文件的Bash脚本。
问题出现在以下部分:
echo "file(GLOB projSRC src/*.cpp)" >> CMakeLists.txt
之后,我需要程序将${SOURCES}
输出到 CMakeList 中.txt
我的意思不是脚本中名为 SOURCES 的变量,我的意思是它实际上应该编写明文${SOURCES}
。
我的意思是,最终文件应该看起来像这样:
arbitrary_command(target PROJECT sources ${SOURCES})
而不是像:
arbitrary_command(target PROJECT sources [insert however bash messes it up here])
如何在我的 Bash 脚本中执行此操作?
对文本字符串使用单引号,而不是双引号:
echo 'file(GLOB ${projSRC} src/*.cpp)' >> CMakeLists.txt
也就是说,在这种情况下,您可以考虑使用 heredoc(甚至是引用的 heredoc),将整个文件编写为一个命令:
cat >CMakeLists.txt <<'EOF'
everything here will be emitted to the file exactly as written
${projSRC}, etc
even over multiple lines
EOF
。或者,如果你想要一些替换,一个没有引用的Heredoc(也就是说,符号 - 在这些例子中EOF
- 没有在开头引用):
foo="this"
cat >CMakeLists.txt <<EOF
here, parameter expansions will be honored, like ${foo}
but can still be quoted: ${foo}
EOF
您还可以让多个命令将输出写入单个重定向,以避免支付多次打开输出文件的费用:
foo=this
{
echo "Here's a line, which is expanded due to double quotes: ${foo}"
echo 'Here is another line, with no expansion due to single quotes: ${foo}'
} >CMakeLists.txt
可能是我不明白你的问题...
但
echo ${SOURCES}
将打印
${SOURCES}
给你的。