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

基于Intel macOS修改CMake编译Apple ARM(M1/M2)兼容二进制

在Intel macOS上编译兼容Apple ARM(M1/M2)的二进制方案

要在Intel架构的Mac上编译出能在M1/M2等Apple ARM芯片上运行的二进制,只需在CMake配置中指定目标架构,同时修正原配置里的冗余和冲突项,具体修改如下:

修改后的完整CMakeLists.txt

cmake_minimum_required(VERSION 2.8)
project(MyLib)

# 指定目标架构为Apple ARM(arm64),要生成同时兼容Intel和ARM的通用二进制就改成"x86_64;arm64"
set(CMAKE_OSX_ARCHITECTURES "arm64")
set(CMAKE_CXX_STANDARD 17)

# Debug模式编译参数
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -g")
# Release模式编译参数
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -DNDEBUG -O3")

# 通用编译参数:移除原有的-std=c++14,避免和CMAKE_CXX_STANDARD 17冲突
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wextra")

INCLUDE_REGULAR_EXPRESSION("^.*$")

option(BUILD_TESTING "Build tests" ON)

SET(CROSSPLATFORM_SRCS
  ${CMAKE_CURRENT_SOURCE_DIR}/../../file1.cpp
  ${CMAKE_CURRENT_SOURCE_DIR}/../../file2.cpp
  ${CMAKE_CURRENT_SOURCE_DIR}/../../file3.cpp
)

add_library(MyLib-macOS SHARED ${CROSSPLATFORM_SRCS})

set_target_properties(MyLib-macOS
  PROPERTIES
  LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin"
  RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin"
  PREFIX ""
  # 开启macOS的RPATH支持,保证动态库运行时能被正确加载
  MACOSX_RPATH ON
)

关键修改说明

  • 指定目标架构:新增CMAKE_OSX_ARCHITECTURES变量,设置为arm64就能强制编译出ARM架构的二进制;如果需要做通用兼容(同时支持Intel和ARM),把值改成x86_64;arm64即可,生成的是fat二进制包。
  • 修复C++标准冲突:原代码同时设置了CMAKE_CXX_STANDARD 17和-std=c++14,会导致编译时标准版本冲突,直接删掉-std=c++14,保留CMAKE_CXX_STANDARD 17的配置即可。
  • 清理重复配置:原代码里Debug和Release的编译参数被重复写了两遍,删掉重复部分,保持配置简洁。
  • 完善动态库属性:添加MACOSX_RPATH ON,这是macOS动态库的必要配置,能避免运行时出现库找不到的问题。

编译验证

在Intel Mac上执行以下命令编译:

mkdir build && cd build
cmake ..
make

编译完成后,用下面的命令验证生成的二进制架构:

lipo -info bin/MyLib-macOS
  • 如果是纯ARM架构,输出会显示:Non-fat file: bin/MyLib-macOS is architecture: arm64
  • 如果是通用二进制,输出会显示:Architectures in the fat file: bin/MyLib-macOS are: x86_64 arm64

内容的提问来源于stack exchange,提问作者Jaime

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 02:37:42