2. 开发环境搭建:Windows下安装MinGW/MSVC、Linux下安装GCC/Clang、macOS下安装Xcode Command Line Tools
说实话,跨平台开发的第一道坎,就是环境搭建。
我见过太多新手,代码写得挺溜,结果卡在装编译器上,一卡就是一整天。我自己早年也踩过不少坑——Windows下MinGW路径配错,Linux下GCC版本太老,macOS上Xcode装完找不到clang……嗯,今天咱们就把这些坑一个个填平。
2.1 为什么不同平台要装不同的编译器?
你想想看,Windows、Linux、macOS,底层API和ABI都不一样。Windows用PE格式,Linux用ELF,macOS用Mach-O。编译器得知道怎么生成对应格式的二进制文件。
说白了,你写的是同一份C/C++代码,但编译器得“入乡随俗”。
核心原则:目标平台是什么,就用那个平台的原生编译器。交叉编译是另一回事,咱们后面再聊。
2.2 Windows:MinGW vs MSVC
Windows下有两个主流选择:MSVC(微软的)和MinGW(GCC的Windows移植版)。
我个人习惯是:做Windows原生开发用MSVC,做跨平台项目用MinGW。为什么?因为MinGW生成的二进制文件依赖msvcrt.dll,而MSVC依赖不同版本的VC运行时库,部署起来更麻烦。
2.2.1 安装MSVC
MSVC是Visual Studio的一部分。你不需要装完整的VS,装个Build Tools就够了。
- 去微软官网下载“Visual Studio Build Tools”
- 运行安装程序,勾选“使用C++的桌面开发”
- 安装完成后,打开“Developer Command Prompt”就能用cl.exe了
# 验证安装
cl.exe
# 输出类似:Microsoft (R) C/C++ Optimizing Compiler Version 19.xx
小技巧:我习惯把cl.exe的路径加到系统PATH里。这样在普通cmd里也能直接编译,不用每次都开Developer Command Prompt。
2.2.2 安装MinGW
MinGW有两个主流发行版:MinGW-w64和TDM-GCC。我个人推荐MinGW-w64,因为它更新更活跃。
- 访问MinGW-w64的SourceForge页面,下载安装器
- 选择架构:x86_64(64位)或i686(32位)
- 选择线程模型:posix(推荐)或win32
- 安装完成后,把bin目录加到PATH里
# 验证安装
gcc --version
# 输出类似:gcc (x86_64-posix-seh-rev0, Built by MinGW-W64 project) 13.2.0
避坑指南:我曾经在MinGW的路径里加了空格,结果编译时死活找不到头文件。折腾了两小时才发现是路径问题。记住:编译器路径里不要有空格,不要有中文!
2.3 Linux:GCC vs Clang
Linux下GCC是标配,几乎每个发行版都预装了。Clang这几年也越来越流行,尤其在LLVM生态里。
我的经验是:GCC兼容性最好,Clang错误信息更友好。如果你刚开始学,我建议先用GCC,等熟悉了再试试Clang。
2.3.1 安装GCC
不同发行版的包管理器不一样,但命令大同小异。
# Debian/Ubuntu
sudo apt update
sudo apt install build-essential
# CentOS/RHEL/Fedora
sudo yum groupinstall "Development Tools"
# 或者
sudo dnf groupinstall "Development Tools"
# Arch Linux
sudo pacman -S base-devel
build-essential这个包会帮你装好gcc、g++、make等一整套工具。嗯,省心。
# 验证安装
gcc --version
g++ --version
make --version
2.3.2 安装Clang
Clang在Ubuntu上安装也很简单。
sudo apt install clang lldb lld
lldb是调试器,lld是链接器。如果你只装clang,也能用,但少了调试功能。
个人经验:我在项目中遇到过GCC和Clang对同一段代码的优化结果不同。比如某些循环展开,GCC做得更激进,Clang更保守。所以如果你做性能敏感的项目,建议两个编译器都测一下。
2.4 macOS:Xcode Command Line Tools
macOS下开发C/C++,最正统的方式是装Xcode Command Line Tools。它包含了Clang编译器、LLDB调试器、make等工具。
你不需要装完整的Xcode(那个太大了,十几个G)。Command Line Tools只有几百兆,够用了。
2.4.1 安装方法
最简单的方式是在终端里运行:
xcode-select --install
系统会弹出一个对话框,点击“安装”就行。如果没弹出来,说明已经装过了。
# 验证安装
clang --version
# 输出类似:Apple clang version 15.0.0 (clang-1500.3.9.4)
注意:Apple的Clang和LLVM官方的Clang版本号不同。Apple会自己打补丁,所以版本号看起来会落后一些。但不用担心,功能上基本一致。
2.4.2 安装Homebrew(可选)
如果你需要GCC或者其他工具,可以用Homebrew安装。
# 安装Homebrew
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
# 安装GCC
brew install gcc
# 安装LLVM(官方版Clang)
brew install llvm
我个人习惯在macOS上同时保留Apple Clang和Homebrew装的GCC。Apple Clang用于日常开发,GCC用于验证代码兼容性。
2.5 知识体系总览
下面这张图帮你理清思路:
2.6 验证环境是否搭好
不管哪个平台,装完之后写个Hello World试试:
#include <iostream>
int main() {
std::cout << "Hello, Cross-Platform World!" << std::endl;
return 0;
}
编译运行:
# Windows (MSVC)
cl hello.cpp
hello.exe
# Windows (MinGW)
g++ hello.cpp -o hello.exe
hello.exe
# Linux/macOS
g++ hello.cpp -o hello
./hello
如果看到输出,恭喜你,环境搭好了。
避坑指南:我曾经在Windows下用MinGW编译一个项目,链接时报了一堆undefined reference。查了半天,发现是MinGW的版本太老,不支持C++17的某些特性。后来换了最新版MinGW-w64,问题解决。所以,记得用最新稳定版。
2.7 多版本管理
有时候你需要同时用多个版本的编译器。比如项目A要求GCC 9,项目B要求GCC 13。
我的做法是用软链接或者环境变量切换。
Linux下用update-alternatives
# 安装多个GCC版本
sudo apt install gcc-9 g++-9 gcc-13 g++-13
# 配置优先级
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-9 90
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-13 100
# 切换版本
sudo update-alternatives --config gcc
macOS下用brew切换
# 安装多个版本
brew install gcc@9 gcc@13
# 用符号链接切换
ln -sf /usr/local/bin/gcc-13 /usr/local/bin/gcc
小技巧:我习惯在项目根目录放一个CMakePresets.json,里面指定编译器路径。这样不同项目自动用不同编译器,省心。
2.8 总结
环境搭建这事儿,说白了就是三步:选对编译器、装对版本、配好路径。
Windows下MSVC和MinGW二选一,Linux下GCC和Clang都行,macOS用Xcode Command Line Tools最省事。
嗯,记住一点:别在路径里加空格和中文。这个坑我替你们踩过了。
一句话记住:编译器装好了,跨平台开发的第一步才算迈出去。