如何在cmake的configure_file中保留“ $ {txt}”?

时间:2018-10-08 10:38:58

标签: cmake tcl keyword

我有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 文件中一样?

2 个答案:

答案 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命令进行分配,而不是内联=操作符。而且您似乎还有另一个上一行的语法问题。)