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.