第2章:开发环境搭建

说实话,跨平台开发最让人头疼的,往往不是代码本身,而是环境配置。我见过太多人花了一周写代码,结果花了两周折腾编译环境。这一章,咱们就把这事儿彻底搞定。

2.1 Windows下安装MinGW-w64

Windows用户想用GCC,MinGW-w64是最靠谱的选择。我个人习惯用这个版本,因为它支持64位,而且更新比较及时。

安装步骤

  1. 访问MinGW-w64的官方下载页面(或者用MSYS2也行)
  2. 选择 x86_64-posix-seh 版本
  3. 解压到 C:\mingw64
  4. 把 C:\mingw64\bin 加到系统PATH里
小提示: 我个人推荐用MSYS2来装,因为它自带包管理器,后续装库方便很多。命令就一行:pacman -S mingw-w64-x86_64-gcc

验证安装

gcc --version
g++ --version
gdb --version

能正常输出版本号,就说明装好了。嗯,这里要注意:如果提示找不到命令,八成是PATH没配对。

避坑指南: 我曾经遇到过一个问题——装了MinGW后,编译出来的程序在别人电脑上跑不了。后来发现是动态链接的问题。建议编译时加上 -static 参数,把库静态链接进去。

2.2 Linux下安装GCC

Linux下装GCC就简单多了。说白了,一行命令搞定。但不同发行版,包管理器不一样。

Debian/Ubuntu系列

sudo apt update
sudo apt install build-essential
sudo apt install gdb

build-essential 这个包会把GCC、G++、make这些基础工具一次性装好。我刚开始用Linux时,不知道有这个包,一个一个装,折腾了半天。

CentOS/RHEL/Fedora系列

sudo yum groupinstall "Development Tools"
sudo yum install gcc gcc-c++ gdb

或者用dnf(Fedora新版本):

sudo dnf groupinstall "Development Tools"

验证安装

gcc --version
g++ --version
make --version
重要提醒: Linux下GCC版本通常比较老。如果你需要C11或C17的新特性,建议手动编译安装新版本。我在项目中就遇到过,Ubuntu 18.04自带的GCC 7.5不支持某些C11特性,最后只能自己编译GCC 9。

2.3 macOS下安装Xcode Command Line Tools

macOS用户最省心。苹果把工具链打包好了,你只需要装个命令行工具就行。

安装方法

xcode-select --install

执行后,会弹出一个对话框,点「安装」就行。它会自动下载安装GCC(其实是Clang)、make、git等工具。

小提示: macOS下的GCC其实是Clang的别名。你运行 gcc --version 会看到显示的是Apple Clang。两者语法基本兼容,但有些GCC特有的扩展不能用。我建议在macOS上开发时,尽量写标准C代码,这样换到Linux上编译也不会出问题。

验证安装

gcc --version
clang --version
make --version
避坑指南: 我曾经在macOS上写了一个用了GCC内联汇编的程序,结果在Linux上编译不过。后来发现,macOS的Clang不支持GCC的AT&T语法内联汇编。所以,如果你要写底层代码,最好在目标平台上测试。

2.4 使用CMake管理项目

手动写Makefile太痛苦了,尤其是跨平台项目。CMake就是来解决这个问题的。你写一份CMakeLists.txt,它能在Windows、Linux、macOS上生成对应的构建文件。

安装CMake

平台 安装命令
Windows 下载安装包,或 choco install cmake
Ubuntu/Debian sudo apt install cmake
CentOS/RHEL sudo yum install cmake
macOS brew install cmake

一个简单的CMake项目

假设你的项目结构是这样的:

my_project/
├── CMakeLists.txt
├── src/
│   └── main.c
└── include/
    └── utils.h

CMakeLists.txt的内容:

cmake_minimum_required(VERSION 3.10)
project(MyProject VERSION 1.0 LANGUAGES C)

# 设置C标准
set(CMAKE_C_STANDARD 11)
set(CMAKE_C_STANDARD_REQUIRED ON)

# 添加头文件路径
include_directories(include)

# 添加源文件
add_executable(my_app src/main.c)

编译项目

mkdir build
cd build
cmake ..
cmake --build .

为什么要在build目录里编译?你想想看,如果把编译产生的临时文件放在源码目录里,那得多乱。用build目录,想清理的话,直接删掉build文件夹就行。

核心要点: CMake的跨平台能力体现在它能自动检测当前系统的编译器、库路径、链接器。你在Windows上跑 cmake ..,它会生成Visual Studio的.sln文件;在Linux上跑,会生成Makefile;在macOS上跑,会生成Xcode项目或者Makefile。一份CMakeLists.txt,三平台通用。

常用CMake变量

变量名 说明
CMAKE_C_COMPILER 指定C编译器路径
CMAKE_CXX_COMPILER 指定C++编译器路径
CMAKE_BUILD_TYPE Debug/Release/RelWithDebInfo
CMAKE_INSTALL_PREFIX 安装路径
小提示: 我个人习惯在CMakeLists.txt里加上这行:set(CMAKE_EXPORT_COMPILE_COMMANDS ON)。这样会生成一个 compile_commands.json 文件,很多代码补全工具(比如clangd)都需要它。

知识体系总览

下面这张图,把本章的核心内容串起来了。你一看就明白,不同平台的环境搭建路径,以及CMake如何作为统一入口。

跨平台开发环境搭建知识体系 CMake 统一管理 Windows Linux macOS 工具链 • MinGW-w64 (GCC) • MSYS2 包管理器 • 静态链接 (-static) 工具链 • build-essential • GCC + GDB • 包管理器安装 工具链 • Xcode CLT • Apple Clang • xcode-select 核心思想:一份CMakeLists.txt,三平台通用编译 避免平台特定代码,使用标准C/C++,CMake自动适配

这张图你看懂了吗?说白了,CMake就是那个「翻译官」,把你的项目描述翻译成各个平台能理解的构建脚本。你只需要维护一份CMakeLists.txt,剩下的交给它。

避坑指南: 我曾经在Windows上用CMake生成Visual Studio项目,结果编译时报了一堆链接错误。查了半天,发现是CMake默认用了MSVC的编译器,但我装的是MinGW。解决办法是在CMakeLists.txt里指定:set(CMAKE_C_COMPILER gcc)。记住,CMake虽然智能,但有时候你得告诉它该用哪个编译器。

好了,环境搭建就讲到这里。工具装好了,下一章咱们就开始写真正的跨平台代码了。


可可精品资料库