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

Bar*_*rth 9 escaping cmake

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

set(testfiles "test1 test2")
add_custom_target(testtouch COMMAND touch ${testfiles})
Run Code Online (Sandbox Code Playgroud)

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

touch test1\ test2
Run Code Online (Sandbox Code Playgroud)

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

为什么CMake会这样做?

怎么避免呢?

And*_*aev 8

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

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

set(testfiles "test1" "test2")
Run Code Online (Sandbox Code Playgroud)


Dar*_*ard 6

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

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

argument3包含在哪里"VAL1 VAL2 VAL3"

我发现用分号替换空格解决了创建 makefile;时的问题。cmake