我想检查列表是否包含特定条目,如下面的代码片段所示:
macro(foo)
if ($(ARGN} contains "bar")
...
endif
endmacro()
CMake不提供contains
。获得理想结果的最佳/最简单方法是什么?
在CMake的wiki中,我找到了一个LIST_CONTAINS宏,但维基页面已过时。这仍然是最好的方式还是CMake获得了新功能?
答案 0 :(得分:49)
使用CMake 3.3或更高版本,if
命令支持IN_LIST
operator,例如:
if ("bar" IN_LIST _list)
...
endif()
对于旧版本的CMake,您可以使用内置的list(FIND)功能:
list (FIND _list "bar" _index)
if (${_index} GREATER -1)
...
endif()
答案 1 :(得分:10)
更少的行:
if (";${ARGN};" MATCHES ";bar;")
# ...
endif()
但请参阅@sakra的IN_LIST
语法,了解更现代的语法。
答案 2 :(得分:2)
我一直在使用if ("${PLATFORM}" MATCHES "^(os|ios|android|linux|win32)$")
之类的内衬来检查列表中是否有PLATFORM
答案 3 :(得分:1)
如果此处的意图是将值添加到列表,但仅当它尚未在列表中时,则另一种方法是将其添加到列表中,然后立即再次删除可能的重复项:
list(APPEND SOME_LIST "value")
list(REMOVE_DUPLICATES SOME_LIST)