在CMAKE中替代STREQUAL

问题描述

在CMAKE文件中,平台架构由以下代码帮助决定。不考虑ARM板(armv7l,armhf等),我只比较前三个字母“ arm”。但是STREQUAL比较所有字符。那么还有其他的CMAKE函数,例如strncmp(),它们仅根据用户的输入比较字符,还是在“ armv7l”中搜索“ arm”?

if( ${ARCHITECTURE} STREQUAL "x86_64" )
set(arch_x86_64 ON CACHE BOOL "X86_64 Architecture")
else()
if( ${ARCHITECTURE} STREQUAL "arm")``` 

解决方法

那么还有其他的CMAKE函数,例如strncmp(),它们仅根据用户的输入比较字符,还是在“ armv7l”中搜索“ arm”?

您可以提取子字符串并进行比较:

string(SUBSTRING "${ARCHITECTURE}" 0 3 tmp)
if("${tmp}" STREQUAL "arm")

但是只使用正则表达式:

if("${ARCHITECTURE}" MATCHES "^arm")