第二章:跨平台开发环境搭建(Windows、macOS、Linux)

说实话,做跨平台SDK改造,第一道坎往往不是代码怎么写。而是环境怎么搭。

我见过太多新人,一上来就撸代码,结果编译报错一整天。最后发现,是编译器版本没对齐。环境搭建这事儿,看似基础,实则暗坑无数。

今天我就把自己这些年踩过的坑,总结一下。咱们一次性把Windows、macOS、Linux的环境搞定。

2.1 统一开发语言与编译器

要做跨平台,你的编译器首先得跨。我个人习惯用CMake + Clang/GCC这组组合。原因很简单,CMake是事实上的C++构建标准,Clang和GCC在三个平台上都能跑。

平台 主力编译器 构建系统 包管理器
Windows MSVC / Clang-cl CMake + Ninja vcpkg
macOS Apple Clang CMake + Ninja Homebrew
Linux GCC / Clang CMake + Ninja apt / yum / dnf

小提示:尽量统一使用CMake的Presets功能。这样团队里每个人的构建配置都一致,能省掉很多“我机器上能编译啊”的扯皮时间。

2.2 Windows 环境配置

Windows 这里我最想说的是:Visual Studio 不是必须装完整版。

你可以只装“Build Tools for Visual Studio”。它不带IDE,就光编译器和工具链。体积小,适合CI环境。我在旧项目里用过,效果不错。

# 安装 vcpkg(Windows 示例)
git clone https://github.com/Microsoft/vcpkg.git
.\vcpkg\bootstrap-vcpkg.bat

# 安装常见依赖
.\vcpkg\vcpkg install boost-system:x64-windows
.\vcpkg\vcpkg install fmt:x64-windows

2.3 macOS 环境配置

macOS 这边,Xcode Command Line Tools 是必须装的。但Xcode本身,你不做iOS开发就不用装。用命令装CLT就好:

xcode-select --install

然后你还需要 Homebrew。这个几乎是macOS开发的标配了。

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

# 用 brew 装 cmake 和 ninja
brew install cmake ninja

特别注意: macOS 上的 Apple Clang 默认不支持 OpenMP。如果你需要并行计算,建议用 brew 装 llvm 版本的 Clang。

2.4 Linux 环境配置

Linux 这里最简单的做法,就是直接用系统包管理器装。

# Ubuntu/Debian
sudo apt update
sudo apt install build-essential cmake ninja-build git

# Fedora/RHEL
sudo dnf groupinstall "Development Tools"
sudo dnf install cmake ninja-build git

你想想看,是不是很简单?嗯,但有个坑:系统自带的 GCC 版本往往偏老。

我建议你装较新版本的 GCC。比如用 PPA 或者手动编译。不然会遇到 C++17/20 新特性不支持的问题。

2.5 统一依赖管理

说到底,跨平台最头疼的就是依赖管理。同一套依赖,在三个平台上都得编译一遍。

我个人推荐两种做法:

  • vcpkg:微软维护的 C++ 包管理器,三平台都支持。适合 Windows 优先的项目。
  • Conan:更灵活的包管理器,适合复杂依赖关系。

注意:别把系统级依赖和项目级依赖混在一起。我在一个项目里就吃过这个亏。系统里装了个 OpenSSL 1.1,项目用的却是 1.0。编译不报错,运行时炸了。查了一天才找到原因。

2.6 编辑器与调试器

编辑器 调试器 跨平台支持
VS Code lldb / gdb 三平台原生支持
CLion 内置调试器 三平台原生支持

我自己一直用 VS Code。配置好 CMake Tools 和 CodeLLDB 插件后,体验跟 CLion 有得一拼。而且免费,团队推广没阻力。

我的习惯:在每个项目根目录放一个 .vscode/ 文件夹。里面写好 settings.json,把 cmake.configureArgs、编译器路径、调试配置都写好。团队成员 clone 下来就能直接用,不用再折腾。

2.7 跨平台环境搭建核心逻辑

跨平台开发环境搭建 · 核心逻辑 Windows macOS Linux MSVC / vcpkg / Ninja Apple Clang / Homebrew GCC / Clang / apt/dnf CMake + Ninja 统一构建 vcpkg / Conan 统一依赖管理 统一构建与依赖管理是跨平台环境搭建的最终目标

2.8 避坑指南:我踩过的三个坑

  1. 路径分隔符问题:Windows 用反斜杠 \,macOS/Linux 用正斜杠 /。我早期写代码全用硬编码,结果 Linux 上编译不过。
    后来统一用 CMake 的 ${CMAKE_SOURCE_DIR} 处理路径,再也没出过问题。
  2. 动态库后缀名:Windows 是 .dll,macOS 是 .dylib,Linux 是 .so。不要混用。我曾经在 CMake 里写死了 .dll,macOS 上链接失败。后来改用 target_link_libraries 自动识别后缀。
  3. CRT 冲突:Windows 上 Debug/Release 混用会导致堆损坏。这是个经典老坑,我早期在一个金融项目里遇到过,排查了两天才定位到。
    解决方案:所有依赖包都保持 Debug/Release 版本一致,且都用动态运行时(MD / MDd)。

2.9 快速验证环境

环境搭好后,写个最小程序验证一下:

#include <iostream>
#include <fmt/core.h>

int main() {
    std::cout << "Hello from cross-platform!" << std::endl;
    fmt::print("fmt works too!\n");
    return 0;
}

用 CMake 构建命令:

cmake -B build -G Ninja -DCMAKE_BUILD_TYPE=Release
cmake --build build
./build/sample_app

如果能正常输出,恭喜你,环境已经搭建好了。接下来就可以安心做 SDK 兼容性改造工作了。