为什么CMake在执行命令时会在空格前加上反斜杠?

时间:2012-01-19 11:37:56

标签: escaping cmake

我在CMakeLists.txt中有一个自定义命令:

set(testfiles "test1 test2")
add_custom_target(testtouch COMMAND touch ${testfiles})

当我运行“make testtouch VERBOSE = 1”时,我看到它执行:

touch test1\ test2

这只是一个例子,但我在一个真实的项目中遇到了这个问题而且“\”正在破坏命令。请注意,我从Find脚本获取变量(此处为testfiles),并且不能只删除双引号。

为什么CMake会这样做?

如何避免它?

2 个答案:

答案 0 :(得分:6)

因为有时cmake list变量类型和cmake字符串文字之间的区别变得很重要。

尝试将变量设置更改为以下内容以避免此问题:

set(testfiles "test1" "test2")

答案 1 :(得分:0)

我正在尝试使用多个参数进行类似的操作,其中一些是字符串,而有些则不是:

add_custom_target(externalProject COMMAND make -s VALUE1:="${argument1}" VALUE2:=${argument2} VALUE3:="${argument3}" ...)

argument3包含"VAL1 VAL2 VAL3"的地方。

我发现当;创建makefile时,用分号cmake代替空格为我解决了这个问题。