CMake动态判断CPU架构:区分Apple Silicon与Intel芯片方案咨询
区分Apple Silicon与Intel架构的CMake解决方案
在CMake中区分Apple Silicon(arm64)和Intel(x86_64)Mac,核心是要获取主机原生架构而非目标架构,你可以通过以下几种可靠方式实现:
方法一:使用CMAKE_HOST_SYSTEM_PROCESSOR变量
CMAKE_SYSTEM_PROCESSOR为空通常是因为你处于交叉编译场景,该变量指向的是目标系统架构;而CMAKE_HOST_SYSTEM_PROCESSOR专门用于获取主机(运行CMake的机器)的架构,在Apple系统下会返回明确的arm64或x86_64。
修改原有代码:
if(WIN32) # 下载Windows版本工具链 elseif(APPLE) if(CMAKE_HOST_SYSTEM_PROCESSOR STREQUAL "arm64") # 下载Apple Silicon版本工具链 elseif(CMAKE_HOST_SYSTEM_PROCESSOR STREQUAL "x86_64") # 下载Intel版本工具链 endif() elseif(LINUX) # 下载Linux版本工具链 endif()
方法二:调用系统命令获取架构
如果CMAKE_HOST_SYSTEM_PROCESSOR出现异常(比如极端环境下的兼容问题),可以通过执行系统命令直接读取硬件信息:
方式1:通过sysctl命令检测ARM64支持
if(WIN32) # 下载Windows版本工具链 elseif(APPLE) execute_process( COMMAND sysctl -n hw.optional.arm64 OUTPUT_VARIABLE IS_APPLE_SILICON OUTPUT_STRIP_TRAILING_WHITESPACE ) if(IS_APPLE_SILICON STREQUAL "1") # 下载Apple Silicon版本工具链 else() # 下载Intel版本工具链 endif() elseif(LINUX) # 下载Linux版本工具链 endif()
方式2:通过uname -m命令获取架构
execute_process( COMMAND uname -m OUTPUT_VARIABLE HOST_ARCH OUTPUT_STRIP_TRAILING_WHITESPACE ) if(WIN32) # 下载Windows版本工具链 elseif(APPLE) if(HOST_ARCH STREQUAL "arm64") # 下载Apple Silicon版本工具链 elseif(HOST_ARCH STREQUAL "x86_64") # 下载Intel版本工具链 endif() elseif(LINUX) # 下载Linux版本工具链 endif()
内容的提问来源于stack exchange,提问作者Farzan
相关产品推荐
相关产品推荐

