使用CMake检查列表是否包含特定条目的最佳方法

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用CMake检查列表是否包含特定条目的最佳方法相关的知识,希望对你有一定的参考价值。

我想检查列表是否包含特定条目,如下面的代码片段:

macro(foo)
if ($(ARGN} contains "bar")
  ...
endif
endmacro()

CMake不提供contains。获得理想结果的最佳/最简单方法是什么?

在CMake的wiki中,我找到了一个LIST_CONTAINS宏,但维基页面已经过时了。这仍然是最好的方式还是CMake获得了新功能?

答案

使用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()
另一答案

线路较少:

if (";${ARGN};" MATCHES ";bar;")
  #  ...
endif()

但是请参阅@sakra中的IN_LIST语法以获得更现代的语法。

另一答案

我一直在使用像if ("${PLATFORM}" MATCHES "^(os|ios|android|linux|win32)$")这样的衬里检查PLATFORM是否在列表中

以上是关于使用CMake检查列表是否包含特定条目的最佳方法的主要内容,如果未能解决你的问题,请参考以下文章

测试列表是不是包含 Clojure 中的特定值

检查逗号分隔列表是不是包含特定数字[重复]

如何检查数组列表是不是包含特定的字符串值? [复制]

检查列表是不是包含特定字符串,问题[关闭]

我可以检查字符串中是否包含数组的元素吗?

ACL访问控制列表规则建立增加条目删除条目.