gpt4 book ai didi

list - CMake - 我应该如何删除以空格分隔的列表中的重复项?

转载 作者:行者123 更新时间:2023-12-01 12:24:32 27 4
gpt4 key购买 nike

'适当的' CMake 列表允许

list(REMOVE_DUPLICATES my_list_name)

但这不适用于仅以空格分隔的字符串的“列表”,例如 CMAKE_C_FLAGS .在此类列表中避免重复的最佳/最简单方法是什么?

最佳答案

这并不是一种不需要先将字符串更改为列表的方法。
使用 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 ${ARG_STR})
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}")

关于list - CMake - 我应该如何删除以空格分隔的列表中的重复项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41416167/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com