Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将列表变量传递给另一个CMake调用?_Cmake - Fatal编程技术网

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

如何将列表变量传递给另一个CMake调用?,cmake,Cmake,在我的CMake脚本中,我使用exec\u程序(${CMake\u COMMAND}…)运行其他CMake实例。我想使父环境的${CMAKE\u MODULES\u PATH}可供子环境使用。因此,我尝试将变量作为参数传递: exec_program(${CMAKE_COMMAND} ... ARGS ... -DCMAKE_MODULE_PATH=${CMAKE_MODULE_PATH} ...) 这弄乱了其他参数,我得到一个CMake错误:源目录似乎不包含CMakeLists.tx

在我的CMake脚本中,我使用
exec\u程序(${CMake\u COMMAND}…)
运行其他CMake实例。我想使父环境的
${CMAKE\u MODULES\u PATH}
可供子环境使用。因此,我尝试将变量作为参数传递:

exec_program(${CMAKE_COMMAND} ... ARGS ...
    -DCMAKE_MODULE_PATH=${CMAKE_MODULE_PATH} ...)
这弄乱了其他参数,我得到一个
CMake错误:源目录似乎不包含CMakeLists.txt。
。因此,我尝试转义变量:

exec_program(${CMAKE_COMMAND} ... ARGS ...
    -DCMAKE_MODULE_PATH="${CMAKE_MODULE_PATH}" ...)
当我在子环境中打印
${CMAKE_MODULE_PATH}
表单时,所有路径都会被打印出来,每个路径之间用空格隔开。但是,CMake在这些路径中找不到脚本。我猜这与作为字符串传递的列表有关,而不是半彩色分隔的列表

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

在我的CMake脚本中,我使用exec_程序(${CMake_COMMAND}…)运行其他CMake实例

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

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

谢谢,我也知道了。但是,如果我想传递一个存储在变量中的列表,而不是一些硬编码的项目,该怎么办?谢谢,这就是我想要的。似乎较新的
execute\u process()
处理问题的能力更强。