I want to check whether a lists contains a specific entry like in the following code snipplet:
macro(foo)
if ($(ARGN} contains \"bar\")
...
endif
endmacro()
I have been using one liner like if ("${PLATFORM}" MATCHES "^(os|ios|android|linux|win32)$")
to check if PLATFORM
is in the list
If the intention here is to add a value to a list but only if it's not already in the list, then an alternative approach is to just add it to the list and immediately remove possible duplicates again:
list(APPEND SOME_LIST "value")
list(REMOVE_DUPLICATES SOME_LIST)
Fewer lines:
if (";${ARGN};" MATCHES ";bar;")
# ...
endif()
But see the IN_LIST
syntax from @sakra for a more-modern syntax.
With CMake 3.3 or later, the if
command supports an IN_LIST
operator, e.g.:
if ("bar" IN_LIST _list)
...
endif()
For older versions of CMake, you can use the built-in list(FIND) function:
list (FIND _list "bar" _index)
if (${_index} GREATER -1)
...
endif()