如何在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
相关产品推荐
相关产品推荐

