You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Bash命令行向CMake传递列表变量并正确解析

在Bash命令行给CMake正确传递列表变量的方法

问题核心是:Bash会把带空格的引号内容当成单个参数传给CMake,而CMake的列表默认用**分号;**作为分隔符,不是空格,所以直接传"a b"会被识别成单个字符串,而非两个元素的列表。下面是几种解决方法:

方法1:直接传递CMake格式的列表

在Bash里用单引号包裹分号分隔的内容,避免Bash解析分号:

cmake -DMY_LIST='a;b' ..

或者给分号加转义符:

cmake -DMY_LIST=a\;b ..

这两种方式都会让CMake接收到a;b,自动解析为包含a和b的列表。

方法2:从Bash数组转换传递

如果你的列表已经是Bash数组,先把数组元素用分号拼接后再传递:

# 定义Bash数组
my_targets=("a" "b" "c with space")
# 把数组的空格分隔换成分号,传给CMake
cmake -DMY_LIST="${my_targets[*]/ /;}" ..

方法3:在CMakeLists.txt中事后转换

如果已经传了空格分隔的字符串,可以在CMake脚本里手动转成列表:

# 把传入的空格分隔字符串替换为分号分隔的CMake列表
string(REPLACE " " ";" MY_LIST "${MY_LIST}")
# 之后就能正常遍历或使用这个列表了
foreach(target IN LISTS MY_LIST)
    message(STATUS "Target: ${target}")
endforeach()

内容的提问来源于stack exchange,提问作者Victor Eijkhout

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 23:39:23