Каков общий способ разбить строку на список с помощью CMAKE? - PullRequest
51 голосов
/ 11 марта 2011

Представьте, что у меня есть следующая строка:

set(SEXY_STRING "I love CMake")

тогда я хочу получить SEXY_LIST из SEXY_STRING, чтобы я мог сделать

list(LENGTH SEXY_LIST len)

и len равно 3.

Я нашел несколько макросов в сети, но я действительно хочу знать, как это сделать "естественным" способом. Эта операция представляется очень простой и широко используемой.

Ответы [ 3 ]

64 голосов
/ 11 марта 2011

Замените ваш разделитель на ;.Я не вижу другого способа сделать это.

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
29 голосов
/ 03 марта 2014

Вы можете использовать команду 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
11 голосов
/ 11 марта 2011
string(REGEX MATCHALL "[a-zA-Z]+\ |[a-zA-Z]+$" SEXY_LIST "${SEXY_STRING}")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...