我在CMakeLists.txt中有一个自定义命令:
set(testfiles "test1 test2")
add_custom_target(testtouch COMMAND touch ${testfiles})
当我运行“make testtouch VERBOSE = 1”时,我看到它执行:
touch test1\ test2
这只是一个例子,但我在一个真实的项目中遇到了这个问题而且“\”正在破坏命令。请注意,我从Find脚本获取变量(此处为testfiles),并且不能只删除双引号。
为什么CMake会这样做?
如何避免它?
答案 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
代替空格为我解决了这个问题。