Best way to check with CMake whether list containts a specific entry
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()
CMake does not offer a contains
. What is best / easiest way to get the desired result?
In CMake's wiki I found a LIST_CONTAINS macro, but the wiki page is outdated. Is this still the best way to go or has CMake gained new capabilities?
Solution 1:
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()
Solution 2:
Fewer lines:
if (";${ARGN};" MATCHES ";bar;")
# ...
endif()
But see the IN_LIST
syntax from @sakra for a more-modern syntax.