1
「適切な」cmakeのリストはCMake - スペース区切りのリストで重複を削除するにはどうすればよいですか?
list(REMOVE_DUPLICATES my_list_name)
を可能とするが、これはCMAKE_C_FLAGS
ようなだけのスペースで区切られた文字列である「リスト」、では動作しません。この種のリストで重複を避けるための最も簡単な方法は何ですか?
「適切な」cmakeのリストはCMake - スペース区切りのリストで重複を削除するにはどうすればよいですか?
list(REMOVE_DUPLICATES my_list_name)
を可能とするが、これはCMAKE_C_FLAGS
ようなだけのスペースで区切られた文字列である「リスト」、では動作しません。この種のリストで重複を避けるための最も簡単な方法は何ですか?
実際に文字列をリストに変更する必要がない方法です。そうする
cmake_minimum_required(VERSION 2.6)
set(ARGS "foo baz bawk bawk bawk")
message(STATUS "args: ${ARGS}")
# args: foo baz bawk bawk bawk
set(ARG_LIST ${ARGS})
separate_arguments(ARG_LIST)
message(STATUS "arg list: ${ARG_LIST}")
# arg list: foo;baz;bawk;bawk;bawk
list(REMOVE_DUPLICATES ARG_LIST)
message(STATUS "arg list: ${ARG_LIST}")
# arg list: foo;baz;bawk
# little utility function to join the list back into a string
function(JOIN VALUES GLUE OUTPUT)
string (REGEX REPLACE "([^\\]|^);" "\\1${GLUE}" _TMP_STR "${VALUES}")
string (REGEX REPLACE "[\\](.)" "\\1" _TMP_STR "${_TMP_STR}") #fixes escaping
set (${OUTPUT} "${_TMP_STR}" PARENT_SCOPE)
endfunction()
JOIN("${ARG_LIST}" " " ARGS)
message(STATUS "args: ${ARGS}")
# args: foo baz bawk
機能をしたいですか? OK:
function(REMOVE_DUPES ARG_STR OUTPUT)
set(ARG_LIST ${ARGS})
separate_arguments(ARG_LIST)
list(REMOVE_DUPLICATES ARG_LIST)
string (REGEX REPLACE "([^\\]|^);" "\\1 " _TMP_STR "${ARG_LIST}")
string (REGEX REPLACE "[\\](.)" "\\1" _TMP_STR "${_TMP_STR}") #fixes escaping
set (${OUTPUT} "${_TMP_STR}" PARENT_SCOPE)
endfunction()
set(ARGS "foo baz bawk bawk bawk fiz")
message(STATUS "args: ${ARGS}")
REMOVE_DUPES(ARGS DEDUPLICATED)
message(STATUS "args: ${DEDUPLICATED}")