web-dev-qa-db-fra.com

Quel est le moyen commun de diviser une chaîne en liste avec CMAKE?

Imaginez que j'ai la chaîne suivante:

set(SEXY_STRING "I love CMake")

alors je veux obtenir SEXY_LIST de SEXY_STRING donc je peux faire

list(LENGTH SEXY_LIST len)

et len est égal à 3.

J'ai trouvé plusieurs macros sur le web, mais je veux vraiment savoir comment le faire de manière "naturelle". Cette opération semble être très basique et largement utilisée.

51
Alexander K.

Remplacez votre séparateur par un ;. Je ne vois pas d'autre moyen de le faire.

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
63
tibur

Vous pouvez utiliser le SEPARATE_ARGUMENTS commande: 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
30
tillaert
string(REGEX MATCHALL "[a-zA-Z]+\ |[a-zA-Z]+$" SEXY_LIST "${SEXY_STRING}")
12
Alexander K.