我有CMakeLists.txt文件并在其中行:
configure_file ( script.tcl.in script.tcl )
cmake成功更改了我需要的标头,但是文件 script.tcl.in 中有如下代码行:
set list "1 2 3"
set line "param "
foreach a $list{
line = ${line}_$a
}
在此块中,我想获取字符串“ param _1_2_3”。
启动 cmake 后,我得到文件 script.tcl ,但是它用 $ {line} 替代了一个,因为$ {smth}是一个参数在cmake中:
set list "1 2 3"
set line "param "
foreach a $list{
line = _$a
}
问题是 cmake 和 tcl 都使用相同的格式$ {var}来获取变量 var 的值。那么,问题是我该怎么做才能获取此块,就像它在 script.tcl.in 文件中一样?
答案 0 :(得分:1)
将@ONLY
选项传递给configure_file
会强制CMake不接触${...}
表达式,而仅替换@VAR@
个表达式。
configure_file ( script.tcl.in script.tcl @ONLY)
如果符号@
对于特定的脚本语言(您正在为其准备脚本)没有特殊含义,则使用@ONLY
是一种有价值的方法。
答案 1 :(得分:0)
可能的解决方法是使用format
在Tcl中生成替换:
line = [format "%s_%s" $line $a]
(该行的其余部分对我来说真的很可疑; Tcl使用set
命令进行分配,而不是内联=
操作符。而且您似乎还有另一个上一行的语法问题。)