Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
String cmake字符串令牌包含检查_String_Cmake_String Comparison - Fatal编程技术网

String cmake字符串令牌包含检查

String cmake字符串令牌包含检查,string,cmake,string-comparison,String,Cmake,String Comparison,在cmake中,如何检查字符串标记是否包含在另一个字符串中 在我的例子中,我想知道编译器的名称是否包含字符串“Clang”(例如“Clang”、“AppleClang”、…)。到目前为止,我所能做的就是: if("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang") ... elseif("${CMAKE_CXX_COMPILER_ID}" STREQUAL "AppleClang") ... 我想要一种更灵活的方法,比如检查子字符串的存在 我可以在文档中找到

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

在我的例子中,我想知道编译器的名称是否包含字符串“Clang”(例如“Clang”、“AppleClang”、…)。到目前为止,我所能做的就是:

if("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang")
...
elseif("${CMAKE_CXX_COMPILER_ID}" STREQUAL "AppleClang")
...
我想要一种更灵活的方法,比如检查子字符串的存在

我可以在文档中找到以下内容:

if(匹配正则表达式) 如果给定字符串或变量的值与给定正则表达式匹配,则为True。
如有(减) 如果给定字符串或变量的值是有效数字且小于右侧的值,则为True。
如果(更大) 如果给定字符串或变量的值是有效数字且大于右侧的值,则为True。
如果(相等) 如果给定字符串或变量的值是有效数字且等于右侧的值,则为True。
如果(无标准) 如果给定字符串或变量的值按字典顺序小于右侧的字符串或变量,则为True。
if(STRGREATER) 如果给定字符串或变量的值按字典顺序大于右侧的字符串或变量,则为True。
if(STREQUAL) 如果给定字符串或变量的值在字典上等于右侧的字符串或变量,则为True

如果(匹配正则表达式)
可能就是您要找的

在这种特殊情况下(假设您在
Clang
AppleClang
的块内执行相同的操作),则可以替换:

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


您列出的方法之一将是最终答案,但是如果没有您正在寻找的令牌和正在搜索的字符串的明确示例,没有人能够更密切地指导您。对于我必须做的,这很好:
if(CMAKE\u CXX\u COMPILER\u ID匹配“Clang”)
由于首字母可以是大写或小写:
if(CMAKE_CXX_COMPILER_ID MATCHES”(C | C?)lang)
@Pietro这是因为,尽管文档记录不完整,但当搜索字符串包含在解析字符串中时,匹配返回true。这至少是我的经验,在几个案例中进行了测试,但文档在这方面仍然很不清楚。@Antonio,这是因为正则表达式在不包含开始/结束标记时,将查看正则表达式是否匹配字符串中的任何位置。在本例中,“AppleClang”结尾包含“铿锵”,因此这是真的。的确,CMake的文档()中没有详细记录这一点,但它是正则表达式的标准。
if(CMAKE_CXX_COMPILER_ID MATCHES "^(Apple)?Clang$")