为什么add_custom_command使用不同的生成器以不同的方式扩展列表参数?

时间:2019-08-23 09:37:44

标签: cmake

我试图将参数列表传递给使用add_custom_command调用的命令的命令行。

使用忍者生成器时,列表元素会被单独引用,然后用分号连接。 使用Visual Studio 2017生成器时,将首先串联元素,然后将整个字符串都用引号引起来。 对于一个调用自定义命令的多平台项目,这让我很头疼。

CMakeLists.txt样本(简体):

set(MY_VARIABLE "value 1" "value 2" "value3")

add_custom_command(OUTPUT Dummy
    COMMAND echo "${MY_VARIABLE}" VERBATIM)

add_custom_target(TestTarget ALL DEPENDS Dummy)

使用Visual Studio时,

cmake -G "Visual Studio 15 2017" .. && cmake --build .

结果是

"value 1";"value2";"value3"

在Windows上使用Ninja时,

cmake -G "Ninja" .. && cmake --build .

结果是

"value 1;value2;value3"

这是否按预期工作?还是我犯错了?

我正在使用CMake 3.15.2。

说明:

我想要的结果是忍者,即所有引用为单个字符串。我正在运行的实际命令正在调用CMake来运行脚本,而我正在尝试向其传递一个列表变量,即:

cmake -D "MY_VARIABLE=${MY_VARIABLE}" -P MyScript.cmake

0 个答案:

没有答案