如何将列表变量传递给另一个CMake调用?

时间:2015-07-26 04:20:37

标签: cmake

在我的CMake脚本中,我使用${CMAKE_MODULES_PATH}运行其他CMake实例。我想让子环境可以使用父环境的exec_program(${CMAKE_COMMAND} ... ARGS ... -DCMAKE_MODULE_PATH=${CMAKE_MODULE_PATH} ...) 。因此,我试图将变量作为参数传递:

CMake Error: The source directory <first-module-path> does not appear to contain CMakeLists.txt.

这弄乱了其他参数,我得到了exec_program(${CMAKE_COMMAND} ... ARGS ... -DCMAKE_MODULE_PATH="${CMAKE_MODULE_PATH}" ...) 。因此,我尝试转义变量:

${CMAKE_MODULE_PATH}

当我在子环境中打印currentMonths表单时,将打印所有路径,每个路径用空格分隔。但是,CMake在这些路径中找不到脚本。我想这与列表传递为字符串而不是半色分隔列表有关。

如何将保存字符串列表的CMake变量传递给另一个CMake命令?

1 个答案:

答案 0 :(得分:1)

  

在我的CMake脚本中,我使用exec_program运行其他CMake实例($ {CMAKE_COMMAND} ...)

根据documentation,不推荐使用此命令:

Deprecated. Use the execute_process() command instead.

列表变量示例CMakeLists.txt:

execute_process(
    COMMAND "${CMAKE_COMMAND}" "-DVAR=A;B;C" -P script.cmake
    OUTPUT_VARIABLE output
)

script.cmake:

message("VAR: ${VAR}")

foreach(x ${VAR})
  message("x: ${x}")
endforeach()

输出:

VAR: A;B;C
x: A
x: B
x: C