Cmake脚本中的映射
我想将变量映射到字符串,如伪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
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不在键上,因为它是找到第一个的正则表达式=。