2017-01-01 16 views

回答

2

是不是一個真正的方法來做到這一點,不需要首先將您的字符串更改爲列表。

使用separate_arguments這樣做:

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 

旺旺的功能?好的:

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}")