Cmake脚本中的映射

Cmake脚本中的映射,cmake,Cmake,我想将变量映射到字符串,如伪cmake代码中的示例所示 map(mymap "val1" "key1" "val2" "key2") # <-- this seems not to exist set(filename "prependfilename${mymap[${avar}]}otherpartoffilename") map(mymap“val1”“key1”“val2”“ke

我想将变量映射到字符串,如伪cmake代码中的示例所示

map(mymap "val1" "key1" "val2" "key2") # <-- this seems not to exist
set(filename "prependfilename${mymap[${avar}]}otherpartoffilename") 

map(mymap“val1”“key1”“val2”“key2”)#CMake不支持
[]
{}
运算符,但可以通过命名方案为变量实现映射:

# The naming scheme: mymap_<val>
set(mymap_val1 key1) # Maps val1 => key1
set(mymap_val2 key2) # Maps val2 => key2
# ...
set(avar val1) # Some key
message("Key ${avar} is mapped into: ${mymap_${avar}}")
#命名方案:mymap_
set(mymap_val1 key1)#Maps val1=>key1
set(mymap_val2 key2)#Maps val2=>key2
# ...
设置(avar val1)#一些键
消息(“键${avar}映射到:${mymap_${avar}}”)
这种“映射”方式正被CMake本身积极使用


例如,变量将编程语言映射到编译器,变量将语言和配置类型映射到编译器标志,特定于此配置。

CMake不支持
[]
{}
运算符,但可以通过命名方案为变量实现映射:

# The naming scheme: mymap_<val>
set(mymap_val1 key1) # Maps val1 => key1
set(mymap_val2 key2) # Maps val2 => key2
# ...
set(avar val1) # Some key
message("Key ${avar} is mapped into: ${mymap_${avar}}")
#命名方案:mymap_
set(mymap_val1 key1)#Maps val1=>key1
set(mymap_val2 key2)#Maps val2=>key2
# ...
设置(avar val1)#一些键
消息(“键${avar}映射到:${mymap_${avar}}”)
这种“映射”方式正被CMake本身积极使用


例如,变量将编程语言映射到编译器,变量将语言和配置类型映射到编译器标志中,特定于此配置。

1分钟谷歌搜索:@KamilCuk如果一个键包含一个等号,如“o=ne”,则1分钟谷歌搜索将失败。但我想这就是在1分钟内在谷歌上找到的代码所发生的事情。。。然后修补它?发明一些转义并编写一个正则表达式,用一些独特的转义模式替换
=
,如
%=
(并用
%
替换
%
)。然后用正则表达式替换它。应该处理它。@KamilCuk的问题更多的是如何在Cmake上处理这个问题(这是一个足够普遍的问题,必须存在一个解决方案/解决方法)。我发现Tsyvarev的答案非常好,并且完全回答了这个问题。@KamilCuk不在键上,但作为第一个=。1分钟的谷歌搜索:@KamilCuk如果一个键包含一个等号,比如“o=ne”,你的1分钟谷歌搜索会失败得很惨。但我想这就是在1分钟内在谷歌上找到的代码所发生的事情。。。然后修补它?发明一些转义并编写一个正则表达式,用一些独特的转义模式替换
=
,如
%=
(并用
%
替换
%
)。然后用正则表达式替换它。应该处理它。@KamilCuk的问题更多的是如何在Cmake上处理这个问题(这是一个足够普遍的问题,必须存在一个解决方案/解决方法)。我发现Tsyvarev的答案非常好,并且完全回答了这个问题。@KamilCuk不在键上,因为它是找到第一个的正则表达式=。