2、环境准备:跨平台开发环境搭建
说实话,跨平台开发最让人头疼的,往往不是代码怎么写,而是环境怎么搭。我见过太多人卡在这一步——Windows 上装好了 GCC,Linux 上又找不到 Clang,macOS 上还冒出个 Xcode 的坑。嗯,这节课我们就来把这摊事理顺。
2.1 三大平台的编译器生态
先搞清楚一件事:我们到底要面对哪些编译器?
| 编译器 | 平台 | 特点 |
|---|---|---|
| GCC | Linux / macOS / Windows (MinGW) | 老牌、稳定、开源。Linux 下的默认选择 |
| Clang | macOS / Linux / Windows | 错误信息友好、编译速度快。macOS 的默认编译器 |
| MSVC | Windows | Visual Studio 自带。Windows 生态的王者 |
我个人习惯是:Linux 用 GCC,macOS 用 Clang,Windows 用 MSVC。但如果你问我哪个最好?其实没有标准答案。我在项目中遇到过好几次,同样的代码在 GCC 下编译通过,换到 MSVC 就报一堆警告。说白了,跨平台的核心不是选哪个,而是让它们都能跑。
2.2 Windows 环境搭建
Windows 上最省心的方式,就是装 Visual Studio。但注意,不是装那个几十 G 的完整版,而是装 Build Tools。
推荐方案:Visual Studio Build Tools 2022
下载地址:微软官网搜索 "Visual Studio Build Tools"
安装时勾选:
- MSVC v143 生成工具
- Windows 10/11 SDK
- CMake 工具(可选)
装完之后,打开 "Developer Command Prompt",输入 cl 试试。如果看到版本信息,说明 MSVC 已经就绪。
那如果想在 Windows 上用 GCC 呢?我建议用 MinGW-w64。别去下那些乱七八糟的旧版本,直接去 mingw-w64.org 下载最新版。解压后把 bin 目录加到 PATH 里就行。
小技巧: 我个人习惯在 Windows 上同时装 MSVC 和 MinGW。MSVC 用来做 Windows 原生开发,MinGW 用来测试跨平台兼容性。两个不冲突,各管各的。
2.3 Linux 环境搭建
Linux 就简单多了。打开终端,一行命令搞定:
# Ubuntu / Debian
sudo apt update
sudo apt install build-essential cmake
# CentOS / RHEL
sudo yum groupinstall "Development Tools"
sudo yum install cmake
装完之后,gcc --version 和 g++ --version 都能看到版本号。如果你想用 Clang,也很简单:
sudo apt install clang lldb lld
为什么还要装 Clang?我在项目中遇到过,GCC 对某些模板代码的报错信息简直像天书,而 Clang 的错误提示就清晰得多。所以调试阶段我经常切到 Clang,发布时再用 GCC 做最终编译。
注意: 不同 Linux 发行版的 GCC 版本差异很大。Ubuntu 20.04 默认是 GCC 9,Ubuntu 22.04 是 GCC 11。如果你需要特定版本,可以用 apt install gcc-10 g++-10 来指定。
2.4 macOS 环境搭建
macOS 用户最省心——装个 Xcode 命令行工具就行:
xcode-select --install
这个命令会安装 Clang、LLDB、Make 等一堆工具。注意,macOS 上的 gcc 其实是个软链接,指向的是 Clang。你想想看,苹果怎么可能真的用 GCC 呢?
如果你确实需要 GCC(比如要测试跨平台兼容性),可以用 Homebrew 安装:
brew install gcc
装完之后,GCC 会被命名为 gcc-12(版本号取决于你装的版本),避免和系统自带的 Clang 冲突。
我的建议: macOS 上优先用 Clang。因为苹果的生态就是围绕 Clang 构建的,很多系统库和框架都依赖它。强行用 GCC 反而可能遇到链接问题。
2.5 验证环境:写个 Hello World
环境搭好了,总得试试能不能用。写个最简单的程序:
// hello.cpp
#include <iostream>
int main() {
std::cout << "Hello, Cross-Platform Build!" << std::endl;
return 0;
}
然后分别用三个编译器编译:
# GCC
g++ hello.cpp -o hello_gcc
./hello_gcc
# Clang
clang++ hello.cpp -o hello_clang
./hello_clang
# MSVC (在 Developer Command Prompt 中)
cl hello.cpp
hello.exe
如果都能输出 "Hello, Cross-Platform Build!",恭喜你,环境已经就绪。
2.6 避坑指南
最后分享几个我踩过的坑:
- 路径分隔符:Windows 用反斜杠
\,Linux/macOS 用正斜杠/。写 CMakeLists.txt 时记得用正斜杠,或者用/统一处理。 - 换行符:Windows 是
\r\n,Linux/macOS 是\n。Git 默认会帮你转换,但如果你在 Windows 上写脚本,记得设置core.autocrlf true。 - 动态库后缀:Windows 是
.dll,Linux 是.so,macOS 是.dylib。写构建脚本时别写死了。
曾经有一次,我在 Windows 上写了一个 Makefile,里面用了 rm -f 来清理文件。结果在 Linux 上跑得好好的,换到 Windows 就报错。后来才发现,Windows 的 cmd 根本不认识 rm。所以跨平台构建,还是老老实实用 CMake 吧。
好了,环境准备就到这里。下一章我们开始写真正的构建系统——从 Makefile 到 CMake,一步步带你搞定。