cmake字符串标记包含检查

时间:2015-02-15 23:22:37

标签: string cmake string-comparison

在cmake中,如何检查字符串标记是否包含在另一个字符串中?

就我而言,我想知道编译器的名称是否包含字符串" Clang" (例如" clang"," AppleClang",...)。我到目前为止所做的就是:

if("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang")
...
elseif("${CMAKE_CXX_COMPILER_ID}" STREQUAL "AppleClang")
...

我想要一种更灵活的方法,比如检查子串的存在。

这是我在文档中可以找到的内容:

if(MATCHES regex) 如果给定的字符串或变量的值与给定的正则表达式匹配,则为True 如果(少) 如果给定字符串或变量的值是有效数字且小于右侧的值,则为真 如果(更大) 如果给定字符串或变量的值是有效数字且大于右侧的值,则为真 if(EQUAL) 如果给定的字符串或变量的值是有效数字且等于右侧的值,则为真 如果(STRLESS) 如果给定字符串或变量的值在字典上小于右侧的字符串或变量,则为True 如果(STRGREATER) 如果给定字符串或变量的值在字典上大于右侧的字符串或变量,则为True if(STREQUAL) 如果给定字符串或变量的值在词典上等于右侧的字符串或变量,则为True。

1 个答案:

答案 0 :(得分:15)

if(<variable|string> MATCHES regex)可能就是你要找的东西。

在这种特殊情况下(假设你在ClangAppleClang的区块内做同样的事情)那么你可以替换:

if("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang")
...
elseif("${CMAKE_CXX_COMPILER_ID}" STREQUAL "AppleClang")
...

使用:

if(CMAKE_CXX_COMPILER_ID MATCHES "^(Apple)?Clang$")