cmake 字符串标记包含检查
cmake string token inclusion check
在cmake中,如何检查一个字符串标记是否包含在另一个字符串中?
在我的例子中,我想知道编译器的名称是否包含字符串 "Clang"(例如 "clang"、"AppleClang"、...)。到目前为止我能做的就是:
if("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang")
...
elseif("${CMAKE_CXX_COMPILER_ID}" STREQUAL "AppleClang")
...
我想要一种更灵活的方法,例如检查是否存在子字符串。
这是我可以在文档中找到的内容:
if(匹配正则表达式)
如果给定的字符串或变量的值与给定的正则表达式匹配,则为真。
如果(少)
如果给定的字符串或变量的值是有效数字并且小于右边的数字,则为真。
如果(更大)
如果给定的字符串或变量的值是有效数字并且大于右边的数字,则为真。
如果(等于)
如果给定的字符串或变量的值是有效数字并且等于右边的数字,则为真。
如果(无压力)
如果给定字符串或变量的值按字典顺序小于右侧的字符串或变量,则为真。
如果(更强)
如果给定字符串或变量的值在字典序上大于右侧的字符串或变量,则为真。
如果(STREQUAL)
如果给定的字符串或变量的值在字典序上等于右侧的字符串或变量,则为真。
if(<variable|string> MATCHES regex)
可能就是您要找的。
在这种特殊情况下(假设您在 Clang
和 AppleClang
的块内做同样的事情)那么您可以替换:
if("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang")
...
elseif("${CMAKE_CXX_COMPILER_ID}" STREQUAL "AppleClang")
...
与:
if(CMAKE_CXX_COMPILER_ID MATCHES "^(Apple)?Clang$")
在cmake中,如何检查一个字符串标记是否包含在另一个字符串中?
在我的例子中,我想知道编译器的名称是否包含字符串 "Clang"(例如 "clang"、"AppleClang"、...)。到目前为止我能做的就是:
if("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang")
...
elseif("${CMAKE_CXX_COMPILER_ID}" STREQUAL "AppleClang")
...
我想要一种更灵活的方法,例如检查是否存在子字符串。
这是我可以在文档中找到的内容:
if(匹配正则表达式)
如果给定的字符串或变量的值与给定的正则表达式匹配,则为真。
如果(少)
如果给定的字符串或变量的值是有效数字并且小于右边的数字,则为真。
如果(更大)
如果给定的字符串或变量的值是有效数字并且大于右边的数字,则为真。
如果(等于)
如果给定的字符串或变量的值是有效数字并且等于右边的数字,则为真。
如果(无压力)
如果给定字符串或变量的值按字典顺序小于右侧的字符串或变量,则为真。
如果(更强)
如果给定字符串或变量的值在字典序上大于右侧的字符串或变量,则为真。
如果(STREQUAL)
如果给定的字符串或变量的值在字典序上等于右侧的字符串或变量,则为真。
if(<variable|string> MATCHES regex)
可能就是您要找的。
在这种特殊情况下(假设您在 Clang
和 AppleClang
的块内做同样的事情)那么您可以替换:
if("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang")
...
elseif("${CMAKE_CXX_COMPILER_ID}" STREQUAL "AppleClang")
...
与:
if(CMAKE_CXX_COMPILER_ID MATCHES "^(Apple)?Clang$")