3. macOS 开发环境搭建

说实话,macOS 的开发环境搭建,是我这些年折腾过最「顺滑」的体验之一。你想想看,一个 Unix 内核的系统,天然就带着 GNU 工具链的血统,再加上 Apple 自己维护的 Clang 编译器,基本上开箱就能写 C/C++。但「能用」和「好用」之间,差的就是我们今天要做的这几步。

我个人习惯把 macOS 的开发环境分成三层:底层工具链、包管理器、终端体验。底层工具链就是 Xcode Command Line Tools,它提供了编译器、链接器、make 等核心工具;包管理器我选 Homebrew,它让安装第三方库变得像逛 App Store 一样简单;终端体验则是 iTerm2 + Oh My Zsh,说白了就是让你的命令行变得好看又好用。

好,我们一步步来。

3.1 安装 Xcode Command Line Tools

Xcode Command Line Tools 是 macOS 上 C/C++ 开发的基础。它包含了 Clang 编译器、LLDB 调试器、Git、Make 等一堆好东西。你不需要装完整的 Xcode(那个十几个G),只装这个命令行工具就够了。

安装方法很简单,打开终端,敲一行命令:

xcode-select --install

系统会弹出一个对话框,点「安装」就行。整个过程大概几分钟,取决于你的网速。

小提示: 如果你之前装过 Xcode,但不确定 Command Line Tools 是否还在,可以用 xcode-select -p 检查路径。如果返回 /Library/Developer/CommandLineTools,说明已经装好了。

安装完成后,验证一下:

clang --version
gcc --version
make --version
git --version

每条命令都应该返回版本号。我记得有一次帮同事排查问题,他死活装不上,后来发现是 macOS 系统版本太老,不支持最新的 Command Line Tools。嗯,这里要注意:如果你的 macOS 版本低于 10.15,建议先升级系统。

3.2 配置 Homebrew

Homebrew 是 macOS 上最流行的包管理器。我愿称它为「macOS 上的 apt-get」。有了它,安装 openssl、cmake、ffmpeg 这些库,就是一行命令的事。

安装 Homebrew 也很简单:

/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

这个脚本会做几件事:

  • 安装 Homebrew 到 /opt/homebrew(Apple Silicon)或 /usr/local(Intel)
  • 创建必要的目录结构
  • 设置环境变量

安装完成后,建议运行一下自检:

brew doctor

这个命令会检查你的 Homebrew 配置是否有问题。我曾经遇到过权限问题,brew doctor 提示某些目录的权限不对,用 sudo chown 修复一下就好了。

注意: 如果你用的是 Apple Silicon 芯片(M1/M2/M3),Homebrew 默认安装到 /opt/homebrew。你需要手动把它的 bin 目录加到 PATH 里。在 ~/.zshrc 中添加:
export PATH="/opt/homebrew/bin:$PATH"

验证安装:

brew --version

看到版本号就说明成功了。接下来你可以试试安装一些常用工具:

brew install wget cmake coreutils

这些工具在后续的跨平台编译中会频繁用到。

3.3 安装 iTerm2 与 Oh My Zsh

macOS 自带的终端其实够用,但 iTerm2 提供了更多实用功能:分屏、热键窗口、搜索、粘贴历史……说白了,就是让终端操作更高效。

去 iTerm2 官网下载安装包,或者用 Homebrew 安装:

brew install --cask iterm2

安装完成后,打开 iTerm2。你会发现界面比原生终端好看不少,但还不够。接下来我们要配置 Oh My Zsh,它是 Zsh 的配置管理框架,提供了主题、插件、别名等一堆好东西。

安装 Oh My Zsh:

sh -c "$(curl -fsSL https://raw.github.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"

安装完成后,你的终端提示符会变成彩色的。默认主题是 robbyrussell,我个人习惯换成 agnoster 或 powerlevel10k。修改主题很简单,编辑 ~/.zshrc 文件:

ZSH_THEME="agnoster"

然后重新加载配置:

source ~/.zshrc

Oh My Zsh 的插件系统也很强大。我常用的插件有:

  • git:提供 git 命令的别名和补全
  • zsh-autosuggestions:根据历史命令自动补全
  • zsh-syntax-highlighting:命令语法高亮

安装插件的方法:

git clone https://github.com/zsh-users/zsh-autosuggestions ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-autosuggestions
git clone https://github.com/zsh-users/zsh-syntax-highlighting.git ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-syntax-highlighting

然后在 ~/.zshrc 中启用它们:

plugins=(git zsh-autosuggestions zsh-syntax-highlighting)
小技巧: 如果你觉得 Oh My Zsh 启动太慢,可以检查一下插件数量。插件越多,启动越慢。我一般只保留 3-5 个最常用的插件。

3.4 配置 Clang 编译器

Clang 是 macOS 上的默认 C/C++ 编译器。它由 LLVM 项目维护,编译速度快、错误信息友好。说实话,我用 Clang 编译大型项目时,明显感觉比 GCC 快不少。

验证 Clang 是否可用:

clang --version

你应该会看到类似这样的输出:

Apple clang version 15.0.0 (clang-1500.0.40.1)
Target: arm64-apple-darwin23.0.0
Thread model: posix

写一个简单的 C 程序测试一下:

// hello.c
#include <stdio.h>

int main() {
    printf("Hello, macOS!\n");
    return 0;
}

编译并运行:

clang hello.c -o hello
./hello

看到「Hello, macOS!」就说明一切正常。

Clang 的常用编译选项:

选项 说明
-Wall 开启所有常见警告
-Wextra 开启额外警告
-O2 优化级别 2(常用)
-std=c17 指定 C 语言标准
-o 指定输出文件名

举个例子,编译一个带警告检查的程序:

clang -Wall -Wextra -std=c17 hello.c -o hello
避坑指南: 我曾经在 macOS 上编译 Linux 项目时,发现 Clang 和 GCC 的行为有些差异。比如 alloca() 函数在 Clang 下默认是支持的,但在 GCC 下需要加 -std=gnu11。如果你要写跨平台代码,建议用 -std=c17 或 -std=c++17 这样的标准,避免依赖编译器特有的扩展。

另外,Clang 的静态分析工具也很实用:

clang --analyze hello.c

这个命令会生成一个 .plist 文件,里面包含了代码中潜在的问题。我在做代码审查时经常用它来快速发现内存泄漏或未初始化变量。

3.5 本章知识体系

下面这张图展示了 macOS 开发环境的核心组件和它们之间的关系:

macOS 开发环境核心组件 macOS 系统层 Xcode Command Line Tools Clang 编译器 · LLDB 调试器 · Git · Make Homebrew 第三方库管理 · 工具安装 iTerm2 + Oh My Zsh 分屏终端 · 主题插件 · 自动补全 跨平台编译 · 代码编译 · 调试优化

从这张图可以看出,macOS 开发环境是分层构建的。底层是系统本身,中间是 Xcode Command Line Tools 提供的核心工具链,再往上是通过 Homebrew 管理的第三方库和 iTerm2 提供的终端体验。最上层才是我们实际的开发工作。

好了,到这里 macOS 的开发环境就搭建完成了。你现在有了 Clang 编译器、Homebrew 包管理器、以及一个漂亮的终端环境。接下来就可以开始真正的跨平台编译工作了。

总结一下今天的内容:
  • 安装了 Xcode Command Line Tools,获得了 Clang、Git、Make 等核心工具
  • 配置了 Homebrew,可以方便地安装第三方库
  • 安装了 iTerm2 和 Oh My Zsh,提升了终端使用体验
  • 验证了 Clang 编译器,并了解了常用编译选项

可可精品资料库