在CMake中将字符串拆分为3个变量

lin*_*llo 13 string list cmake

我有一个程序版本变量

set(MY_PROGRAM_VERSION "2.5.1")
Run Code Online (Sandbox Code Playgroud)

我想保存2,5,1到3个不同的变量,比如

MY_PROGRAM_VERSION_MAJOR=2
MY_PROGRAM_VERSION_MINOR=5
MY_PROGRAM_VERSION_PATCH=1
Run Code Online (Sandbox Code Playgroud)

但我真的不知道如何访问CMake列表中的单个元素.有些想法?

del*_*ooo 30

According to this and this i would guess you need to transform the string to something like a list literal and use GET on your new list:

cmake_minimum_required(VERSION 2.8)

set(MY_PROGRAM_VERSION "2.5.1")

string(REPLACE "." ";" VERSION_LIST ${MY_PROGRAM_VERSION})
list(GET VERSION_LIST 0 MY_PROGRAM_VERSION_MAJOR)
list(GET VERSION_LIST 1 MY_PROGRAM_VERSION_MINOR)
list(GET VERSION_LIST 2 MY_PROGRAM_VERSION_PATCH)
Run Code Online (Sandbox Code Playgroud)


Com*_*sMS 1

CMake 的string命令就是这里的方法。

如果您自己设置变量的值并且没有从某些第三方来源获取它,您可能需要改用此方法:

function(SetVersionNumber PREFIX VERSION_MAJOR VERSION_MINOR VERSION_PATCH)
  set(${PREFIX}_VERSION_MAJOR ${VERSION_MAJOR} PARENT_SCOPE)
  set(${PREFIX}_VERSION_MINOR ${VERSION_MINOR} PARENT_SCOPE)
  set(${PREFIX}_VERSION_PATCH ${VERSION_PATCH} PARENT_SCOPE)
  set(${PREFIX}_VERSION
        "${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_PATCH}"
        PARENT_SCOPE)
endfunction()

[...]

SetVersionNumber(MY_PROGRAM 2 5 1)
message(${MY_PROGRAM_VERSION_MAJOR})
message(${MY_PROGRAM_VERSION_MINOR})
message(${MY_PROGRAM_VERSION_PATCH})
message(${MY_PROGRAM_VERSION})
Run Code Online (Sandbox Code Playgroud)

使您不必进行正则表达式巫毒;)