使用CMAKE将字符串拆分为列表的常用方法是什么?

Ale*_* K. 53 cmake

想象一下,我有以下字符串:

set(SEXY_STRING "I love CMake")
Run Code Online (Sandbox Code Playgroud)

然后我想从中获得SEXY_LIST,SEXY_STRING所以我能做到

list(LENGTH SEXY_LIST len)
Run Code Online (Sandbox Code Playgroud)

并且len等于3.

我在网上发现了几个宏,但我真的想知道如何以"自然"的方式做到这一点.这种操作似乎非常基础并且被广泛使用.

tib*_*bur 64

用a替换你的分隔符;.我没有看到任何其他方法.

cmake_minimum_required(VERSION 2.8)

set(SEXY_STRING "I love CMake")
string(REPLACE " " ";" SEXY_LIST ${SEXY_STRING})

message(STATUS "string = ${SEXY_STRING}")
# string = I love CMake

message(STATUS "list = ${SEXY_LIST}")
# list = I;love;CMake

list(LENGTH SEXY_LIST len)
message(STATUS "len = ${len}")
# len = 3
Run Code Online (Sandbox Code Playgroud)

  • 为了避免空列表出现错误,请将输入放在引号中:`string(REPLACE " " ";" SEXY_LIST "${SEXY_STRING}")` (3认同)

til*_*ert 31

您可以使用以下SEPARATE_ARGUMENTS命令:http://www.cmake.org/cmake/help/cmake2.6docs.html#command : separate_arguments

cmake_minimum_required(VERSION 2.6)

set(SEXY_STRING "I love CMake")

message(STATUS "string = ${SEXY_STRING}")
# string = I love CMake

set( SEXY_LIST ${SEXY_STRING} )
separate_arguments(SEXY_LIST)

message(STATUS "list = ${SEXY_LIST}")
# list = I;love;CMake

list(LENGTH SEXY_LIST len)
message(STATUS "len = ${len}")
# len = 3
Run Code Online (Sandbox Code Playgroud)


Ale*_* K. 15

string(REGEX MATCHALL "[a-zA-Z]+\ |[a-zA-Z]+$" SEXY_LIST "${SEXY_STRING}")
Run Code Online (Sandbox Code Playgroud)