cmake 在 add_custom_target 命令中错误地解析参数

Ker*_*ery 6 cmake

我写了一个这样的cmake命令:

add_custom_target(testar
              COMMAND clearmake -C gnu ${CMD_ARGS})
Run Code Online (Sandbox Code Playgroud)

CMD_ARGS在命令行上定义如下:

cmake -DCMD_ARGS="-d -w" 
Run Code Online (Sandbox Code Playgroud)

但在生成的makefile中,-d -w改为-d\ -w; 它在所有空格之前添加了斜杠,结果是:

clearmake -C gnu -d\ -w 
Run Code Online (Sandbox Code Playgroud)

如果我VERBATIM在 中使用选项add_custom_target,cmake 不会添加斜杠,但它会引用参数,例如

clearmake -C gnu "-d -w"
Run Code Online (Sandbox Code Playgroud)

这是不正确的,我想:

clearmake -C gnu -d -w
Run Code Online (Sandbox Code Playgroud)

生成上述目标所需的语法是什么?

tpg*_*114 6

参数应该是 a list,而“-d -w”不是(它只是一个字符串)。你可以做两件事:

  1. 以 -DCMD_ARGS="-d;-w" 形式传递参数(空格是分号)
  2. 在将其传递到之前,请使用split_arguments命令(这会使用空格分号来生成正确的)。CMD_ARGSadd_custom_targetlist

命令中的任何内容都不add_custom_target需要更改,CMake 的输入不正确,可以用 1 修复或用 2 处理。