【问题标题】:Use Bash associative array in CMake在 CMake 中使用 Bash 关联数组
【发布时间】:2018-04-12 06:16:30
【问题描述】:

我需要通过cmake 访问bash 关联数组元素。所以假设我的声明和访问在 bash 中类似于以下内容:

~ declare -x someText=124
~ echo $someText
124
~ declare -A mymap=( [foo]=bar [baz]=quux)
~ echo ${mymap[foo]}
bar

CMakeLists.txt 中的访问权限为:

message(STATUS "$ENV{someText})
message(STATUS "$ENV{mymap})

当我运行 cmake 时,我得到以下信息:

-- 124
-- 

因此,无法通过 $ENV{} cmake 命令访问关联数组。任何想法如何访问它?具体来说,我不关心完整的关联数组,只关心其中的一个元素。

【问题讨论】:

  • bash -c 打开一个子shell,第一个命令中定义的数组mymap在第二个echo中将不可用
  • 好的,但即使我摆脱 bash -c 并单独运行每个命令,我也会收到相同的消息。
  • @Inian: bash -c 打开一个 chid 进程,它不是子 shell。子外壳是将现有变量(和其他资源)复制到子外壳的位置,无论它们是否被导出。由于父级 (cmake) 不是 bash,因此它无法创建 bash 子 shell。
  • @TassosTzavellas:你会,你不能从另一个进程(shell)导入一个变量值,更不用说另一种语言,没有某种进程间通信。

标签: bash cmake


【解决方案1】:

CMake 无法访问在 bash shell 中创建的 array 变量。

进程cmake 没有看到数组变量 - 与“普通”变量不同,数组 变量不是环境的一部分 strong> 传递给进程。

即使是另一个 bash 子进程也看不到数组变量,请参阅 this question

【讨论】:

    猜你喜欢
    • 2022-07-21
    • 1970-01-01
    • 2015-06-30
    • 1970-01-01
    • 2012-07-31
    • 2015-01-07
    • 1970-01-01
    • 1970-01-01
    • 2015-04-13
    相关资源
    最近更新 更多