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

M1 Mac下如何用Xcode命令行工具及make编译Intel/通用二进制?

用Make命令行编译多架构二进制(M1 Mac)

一、分别生成x86_64和arm64独立二进制

通过给编译工具指定目标架构和SDK路径,就能单独编译对应架构的二进制文件:

  1. 编译x86_64架构
    直接在命令行传入编译参数:

    make CC="clang -arch x86_64 -isysroot $(xcrun --show-sdk-path --sdk macosx)"
    

    或者在Makefile中固定配置:

    CC = clang
    CFLAGS = -arch x86_64 -isysroot $(shell xcrun --show-sdk-path --sdk macosx)
    
    # 项目原有编译规则,比如
    mybinary: main.c
        $(CC) $(CFLAGS) $^ -o $@
    
  2. 编译arm64架构
    仅需把架构参数替换为arm64:
    命令行方式:

    make CC="clang -arch arm64 -isysroot $(xcrun --show-sdk-path --sdk macosx)"
    

    Makefile配置同理,修改CFLAGS中的-arch值即可。

    验证架构:编译完成后用lipo -info <二进制文件名>查看结果。


二、生成Universal Binary(胖二进制)

有两种实现方式,按需选择:

方式1:先编译单架构版本,再合并

先分别编译两个架构的二进制,再用lipo工具合并成通用二进制:
对应的Makefile示例:

CC = clang
SDK_PATH = $(shell xcrun --show-sdk-path --sdk macosx)

all: mybinary-universal

# 编译x86_64版本
build/x86_64/mybinary:
	mkdir -p build/x86_64
	$(CC) -arch x86_64 -isysroot $(SDK_PATH) main.c -o $@

# 编译arm64版本
build/arm64/mybinary:
	mkdir -p build/arm64
	$(CC) -arch arm64 -isysroot $(SDK_PATH) main.c -o $@

# 合并为通用二进制
mybinary-universal: build/x86_64/mybinary build/arm64/mybinary
	lipo -create $^ -output $@

clean:
	rm -rf build mybinary-universal

执行make即可生成通用二进制文件。

方式2:直接一次编译生成

编译时同时指定两个架构参数,clang会直接输出包含双架构的胖二进制:
命令行方式:

make CC="clang -arch x86_64 -arch arm64 -isysroot $(xcrun --show-sdk-path --sdk macosx)"

Makefile配置方式:

CC = clang
CFLAGS = -arch x86_64 -arch arm64 -isysroot $(shell xcrun --show-sdk-path --sdk macosx)

mybinary: main.c
	$(CC) $(CFLAGS) $^ -o $@

注意事项

  • 确保已安装Xcode命令行工具,可通过xcode-select --install完成安装
  • xcrun --show-sdk-path用于获取当前系统的macOS SDK路径,保证编译环境统一

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 05:22:40