You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 07:08:31