4. macOS 环境搭建:Xcode Command Line Tools 安装、Homebrew 配置、多版本 GCC/Clang 管理
macOS 的编译环境,说简单也简单,说坑也多。我见过不少同事,拿到新 Mac 第一件事就是装 Xcode,结果发现光是那十几个 G 的下载就能让人崩溃。其实,我们搞编译的,大部分时候只需要命令行工具就够了。
这一章,我就带你走一遍我自己的搭建流程。嗯,都是踩过坑之后总结出来的。
4.1 Xcode Command Line Tools:别装全家桶
Xcode 本身是个 IDE,体积巨大。我们只需要它的编译器核心——Command Line Tools。这东西包含了 Clang、LLVM、Make、Git 等一整套工具链。
安装方式很简单,打开终端,敲一行命令:
xcode-select --install
系统会弹出一个窗口,点「安装」就行。整个过程大概几分钟,比下 Xcode 快多了。
clang,排查了半天才发现是工具链没了。重新跑一遍上面的命令就好。
装完后,验证一下:
gcc --version
clang --version
make --version
能看到版本号,就说明环境就绪了。
4.2 Homebrew:macOS 的包管理器
Homebrew 是 macOS 上最流行的包管理工具。没有它,你手动装个库能累死。我个人觉得,它是 macOS 开发者的必备品。
4.2.1 安装 Homebrew
官方推荐一行命令安装:
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
但这里有个坑——国内网络环境。这个脚本会从 GitHub 拉东西,速度可能很慢。我建议你提前配好代理,或者用国内镜像源。
安装完成后,跑一下 brew doctor,它会帮你检查环境有没有问题。如果有警告,按提示修复就行。
4.2.2 配置国内镜像源(可选但推荐)
如果你不想每次装软件都等半天,可以换源。以中科大源为例:
# 替换 Homebrew 核心仓库
cd "$(brew --repo)"
git remote set-url origin https://mirrors.ustc.edu.cn/brew.git
# 替换 Homebrew Bottles 源
echo 'export HOMEBREW_BOTTLE_DOMAIN=https://mirrors.ustc.edu.cn/homebrew-bottles' >> ~/.zshrc
source ~/.zshrc
换完之后,装个软件试试速度:
brew install wget
如果几秒钟就装好了,说明配置成功。
4.3 多版本 GCC/Clang 管理
项目多了,你会发现不同项目对编译器版本的要求不一样。有的项目要用 GCC 11,有的要用 Clang 14。怎么管理?
我推荐用 Homebrew 安装多个版本,然后通过软链接或环境变量切换。
4.3.1 安装多版本 GCC
Homebrew 里 GCC 的命名规则是 gcc@版本号。比如:
brew install gcc@11
brew install gcc@12
装完后,它们会被放在 /usr/local/bin 下,但名字会带版本后缀,比如 gcc-11、g++-12。系统自带的 gcc 其实是指向 Clang 的软链接,别搞混了。
gcc 默认是 Clang 的别名。真正的 GCC 是 gcc-11 这种带版本号的。我第一次用 Mac 时就被这个坑过,编译一个依赖 GCC 特性的项目,死活过不去,后来才发现用的是 Clang。
4.3.2 安装多版本 Clang/LLVM
Clang 的安装方式类似:
brew install llvm@14
brew install llvm@15
装完后,它们会在 /usr/local/opt/llvm@14/bin 下。系统自带的 Clang 在 /usr/bin/clang,版本通常比较旧。
4.3.3 版本切换实战
我一般用两种方式切换:
| 方式 | 命令 | 适用场景 |
|---|---|---|
| 临时切换 | export CC=gcc-11 CXX=g++-11 |
单个项目编译 |
| 永久切换 | 修改 ~/.zshrc,添加别名或 PATH |
默认使用特定版本 |
举个例子,我想让当前终端会话用 GCC 12:
export CC=gcc-12
export CXX=g++-12
export LDFLAGS="-L/usr/local/opt/gcc@12/lib"
export CPPFLAGS="-I/usr/local/opt/gcc@12/include"
然后编译项目时,CMake 或 Makefile 就会自动用你指定的编译器。
-DCMAKE_C_COMPILER= 参数指定。这样每个项目独立,不会互相影响。
4.4 知识体系总览
下面这张图,帮你理清 macOS 编译环境的整体结构:
4.5 常见问题与排查
搭建过程中,你可能会遇到这些问题:
- Command Line Tools 安装失败: 检查网络,或者去 Apple 开发者官网手动下载 .dmg 安装包。
- Homebrew 更新慢: 换国内镜像源,或者用代理。
- 编译器版本不对: 用
which gcc和gcc --version确认当前用的是哪个。 - 链接时找不到库: 检查
LDFLAGS和CPPFLAGS是否设置正确。
好了,按照上面的步骤走一遍,你的 macOS 编译环境应该就稳了。接下来,你就可以放心地编译各种 C/C++ 项目了。