Каков общий способ разделить строку на список с помощью CMAKE?
Представьте, что у меня есть следующая строка:
set(SEXY_STRING "I love CMake")
то я хочу получить SEXY_LIST
из SEXY_STRING
, чтобы я мог делать
list(LENGTH SEXY_LIST len)
и len
равно 3.
Я нашел несколько макросов в Интернете, но я действительно хочу знать, как это сделать "естественным" способом. Эта операция, по-видимому, очень проста и широко используется.
Ответы
Ответ 1
Замените разделитель на ;
. Я не вижу другого способа сделать это.
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
Ответ 2
Вы можете использовать команду 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
Ответ 3
string(REGEX MATCHALL "[a-zA-Z]+\ |[a-zA-Z]+$" SEXY_LIST "${SEXY_STRING}")