Apple M2处理器上CMake返回x86_64而非arm64的原因咨询
Apple M2上CMake 3.23.0识别架构为x86_64的根源与彻底解决方法
问题根源
- CMake为x86_64版本,通过Rosetta 2运行:M2是arm64架构,但如果你的CMake是x86_64编译版本,会借助Rosetta 2兼容层运行,此时CMake会认为自身处于x86_64环境,因此
CMAKE_HOST_SYSTEM_PROCESSOR返回x86_64,同时自动注入x86_64的编译链接参数。 - 终端处于Rosetta兼容模式:即使系统是arm64,若终端通过Rosetta打开,终端内运行的所有进程(包括CMake)都会以x86_64模式执行,导致架构识别偏差。
彻底解决办法
1. 替换为arm64原生版本的CMake
- 先检查当前CMake的架构:
若输出包含file $(which cmake)x86_64,说明是x86_64版本,需要替换。 - 确保Homebrew为arm64原生版本(安装路径应为
/opt/homebrew,而非x86_64版本的/usr/local),然后执行:# 先卸载旧版本(如果有) brew uninstall cmake # 安装arm64原生版本 brew install cmake
2. 切换终端为arm64原生模式
- 打开访达,进入「应用程序/实用工具」,找到终端应用;
- 右键点击终端,选择「显示简介」;
- 取消勾选「使用Rosetta打开」,重启终端后再运行CMake。
3. 验证修复效果
- 检查CMake架构:
file $(which cmake),输出应包含arm64; - 新建测试项目,运行
cmake .,查看CMAKE_HOST_SYSTEM_PROCESSOR的值应为arm64,编译时也不会自动添加-arch x86_64参数。
说明:之前手动设置CMAKE_OSX_ARCHITECTURES arm64属于临时规避方案,解决根源问题后无需再额外配置,CMake会自动适配arm64架构。
内容的提问来源于stack exchange,提问作者Arvin
相关产品推荐
相关产品推荐

