CMake在add_custom_target命令中错误解析参数。

5

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

add_custom_target(testar
              COMMAND clearmake -C gnu ${CMD_ARGS})

CMD_ARGS是在命令行上定义的,例如:

cmake -DCMD_ARGS="-d -w" 

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

clearmake -C gnu -d\ -w 

如果我在add_custom_target中使用VERBATIM选项,CMake不会添加斜杠,但是会像这样引用参数:
clearmake -C gnu "-d -w"

这是错误的,我想要:

clearmake -C gnu -d -w

生成上述目标所需的语法是什么?
1个回答

5
参数应该是一个列表,而“-d -w”不是(它只是一个字符串)。你可以做两件事情:
  1. 将参数传递为-DCMD_ARGS =“-d; -w”(空格是分号)
  2. 在将其传递到add_custom_target之前,在CMD_ARGS上使用separate_arguments命令(使空格变成分号以生成正确的列表)。
add_custom_target命令中没有任何需要更改的内容,CMake的输入不正确,可以通过1来修复或通过2来处理。

@tpg2114 我不明白为什么 COMMAND 中的前几个内容不需要用分号分隔?它是 COMMAND clearmake -C gnu ${CMD_ARGS},但为什么不是 COMMAND clearmake;-C;gnu;${CMD_ARGS} - David Doria

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接