web-dev-qa-db-ja.com

CMAKEで文字列をリストに分割する一般的な方法は何ですか?

次の文字列があると想像してください:

set(SEXY_STRING "I love CMake")

SEXY_LISTからSEXY_STRINGを取得したいので、

list(LENGTH SEXY_LIST len)

lenは3です。

ウェブ上でいくつかのマクロを見つけましたが、「自然な」方法でそれを行う方法を本当に知りたいです。この操作は非常に基本的で広く使用されているようです。

51
Alexander K.

区切り文字を;に置き換えます。他の方法は見当たりません。

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

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