第一章:C 语言环境的搭建(🎯)
1.1 概述
- C 语言并没有像
Java或Rust那样“全家桶式”的统一标准工具链。
提醒
- Java:Maven 或 Gradle。
- Rust:Cargo 。
- C 语言的生态是由
编译器、构建工具和包管理器三层独立构成的,如下所示:
点我查看 具体细节
① 编译器:编译器负责将 C 语言源码(
.c)翻译为可执行的机器码。- GCC、Clang 与 LLVM 的关系:
编译器类别 描述 LLVM(编译器基础设施框架) 它不是一个直接拿来用的编译器,而是一个 模块化的编译器框架。 它定义了一套通用的中间代码(LLVM IR)。任何语言(C、C++、Rust、Swift)只要能翻译成 LLVM IR,就能直接复用 LLVM 强大的底层优化器和针对不同硬件(x86、ARM、RISC-V)的代码生成器。 Clang(编译器前端) 专门针对 C/C++/Objective-C 的 编译器前端。 它负责语法分析、语义检查,然后生成 LLVM IR,再交给后端 LLVM 去优化并生成最终二进制。 Clang 编译速度快、错误提示极其人性化,目前是 macOS (Xcode) 和 iOS 开发的默认编译器,在 Linux/Windows 上也广泛使用。 GCC(GNU Compiler Collection) Linux 世界的“基石”级编译器。历史悠久(始于 GNU 计划),支持几乎所有的硬件架构与操作系统。 GCC 是一个包含前端解析和后端优化的完整编译器套件。在 Linux 系统和嵌入式开发中占据绝对统治地位。 - 核心关系,如下所示:
核心关系 描述 特点 GCC 独立的一套经典编译器架构(GNU 体系) 两者在命令行参数上高度兼容。 Clang + LLVM 新一代模块化编译器架构(Clang 负责前段语法解析,LLVM 负责后段优化与生成代码)。 ② 构建工具:自动化编译流程(C 语言项目往往包含多个源码文件、头文件与外部库。直接手动敲
gcc file1.c file2.c -o app难以维护,因此需要构建工具)。
| 构建工具类别 | 描述 |
|---|---|
| Make(+ Makefile) | 最基础、最经典的构建工具。 |
通过编写 Makefile 脚本,定义文件依赖关系与编译命令,实现增量编译(仅重编译被修改的文件)。 | |
| CMake(元构建系统(Meta-Build System)) | 目前 C/C++ 跨平台开发的事实标准。 |
它不直接编译代码,而是读取 CMakeLists.txt 后 生成 适合当前平台的底层构建文件(在 Linux 上生成 Makefile,在 Windows 上生成 Visual Studio 工程,在 macOS 上生成 Xcode 工程)。 | |
| Meson | 现代、极速的元构建系统,使用 Python 编写,语法类似 Python,简洁清爽。 |
| 在 Linux 桌面生态(如 GNOME 社区)和许多现代化开源 C 项目中非常流行,搭配 Ninja(极速底层构建工具)使用体验极佳。 | |
| MSBuild / XCodeBuild | 分别是 Windows (Visual Studio) 和 Apple (Xcode) 平台的原生集成构建工具。 |
- ③ 包管理器:第三方库依赖管理(传统 C 语言没有标准包管理器,引用第三方库通常需要手动下载源码/预编译库、配置头文件路径(
-I)和链接库路径(-L/-l),现代 C 语言社区正在逐步普及包管理器)。
| 包管理器类别 | 描述 |
|---|---|
| vcpkg | 由微软主导开源的 C/C++ 包管理器,跨平台(Windows/Linux/macOS)支持极佳,能够与 CMake 深度无缝集成,非常适合获取常见的开源 C/C++ 库。 |
| Conan | 基于 Python 的现代分布式 C/C++ 包管理器,灵活且功能强大,多用于大型企业级项目的依赖版本管控。 |
| 系统级包管理器(Linux / MSYS2 / Homebrew) | 在 Linux 上直接使用 apt / pacman / dnf 安装 libxxx-dev 开发包;在 Windows 上使用 MSYS2 的 pacman 安装预编译好的 C 库,是传统且高频的使用方式。 |

1.2 Windows 搭建开发环境
1.2.1 概述
- 在 Windows 上选择 MSYS2 ,其是一套工具和库的集合,为我们提供一个易于使用的环境,用于构建、安装和运行原生 Windows 软件。
点我查看 具体细节
- ① MSYS2 = Unix 开发环境 + pacman 包管理 + MinGW-w64 + GCC / Clang + Windows 原生编译工具链。
- ② MSYS2 的整体结构,如下所示:
txt
┌──────────────────────────────────────────────────────────┐
│ Windows 10 / 11 │
│ │
│ Kernel32.dll / UCRT / Win32 API / Windows Kernel │
└──────────────────────────▲───────────────────────────────┘
│
生成原生 Windows 程序
│
┌──────────────────────────┴───────────────────────────────┐
│ MSYS2 │
│ │
│ ┌─────────────────────────────────────────────────┐ │
│ │ MinGW-w64 环境 │ │
│ │ │ │
│ │ UCRT64 CLANG64 CLANGARM64 │ │
│ │ │ │ │ │ │
│ │ GCC Clang Clang │ │
│ │ │ │ │ │ │
│ │ x86-64 x86-64 ARM64 │ │
│ │ │ │ │ │ │
│ │ UCRT UCRT UCRT │ │
│ │ │ │ │ │ │
│ │ Windows 原生可执行程序 .exe / .dll │ │
│ └─────────────────────────────────────────────────┘ │
│ │
│ ┌─────────────────────────────────────────────────┐ │
│ │ MSYS 环境 │ │
│ │ │ │
│ │ Bash / coreutils / grep / sed / awk / tar │ │
│ │ make / pacman / ssh / git ... │ │
│ │ │ │ │
│ │ MSYS2 Runtime │ │
│ │ (基于 Cygwin) │ │
│ └─────────────────────────────────────────────────┘ │
│ │
│ pacman │
│ 统一管理软件包 │
└──────────────────────────────────────────────────────────┘1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
- ③ MSYS2 当前几个主要架构,如下所示:
| 环境 | CPU | 编译器 | C 运行库 | C++ 库 | 目录 | 是否推荐 |
|---|---|---|---|---|---|---|
| MSYS | x86-64 | GCC | Cygwin | libstdc++ | /usr | ❌️ |
| UCRT64 | x86-64 | GCC | UCRT | libstdc++ | /ucrt64 | ✅️ |
| CLANG64 | x86-64 | Clang/LLVM | UCRT | libc++ | /clang64 | ✅️ |
| CLANGARM64 | ARM64 | Clang/LLVM | UCRT | libc++ | /clangarm64 | ❌️ |

1.2.2 安装
1.2.2.1 概述
安装分为手动安装和自动安装(命令行)两种。
1.2.2.2 手动版
- ① 鼠标双击安装包,如下所示:

- ② 点击
Next,如下所示:

- ③ 指定安装目录,并点击
Next,如下所示:
建议
尽量选择默认文件夹!!!

- ④ 点击
Next,如下所示:

- ⑤ 点击
Next,如下所示:

- ⑥ 点击
Finish,如下所示:

- ⑦ 安装相关工具,如下所示:
bash
# 替换清华镜像源(可选)
sed -i \
"s#https\?://mirror.msys2.org/#https://mirrors.tuna.tsinghua.edu.cn/msys2/#g" \
/etc/pacman.d/mirrorlist*
# 安装相关工具链
pacman -Syu --noconfirm # 更新包管理器
pacman -Sy base-devel --noconfirm # 安装开发工具包
# 安装 UCRT 编译工具链及构建工具
pacman -Syu --noconfirm \
mingw-w64-ucrt-x86_64-toolchain \
mingw-w64-ucrt-x86_64-meson \
mingw-w64-ucrt-x86_64-cmake \
mingw-w64-ucrt-x86_64-bear \
mingw-w64-ucrt-x86_64-cunit
# 安装 Clang 编译工具链及构建工具
pacman -Syu --noconfirm \
mingw-w64-clang-x86_64-toolchain \
mingw-w64-clang-x86_64-meson \
mingw-w64-clang-x86_64-cmake \
mingw-w64-clang-x86_64-bear \
mingw-w64-clang-x86_64-cunit1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24

1.2.2.3 自动版
- ① 打开 powershell,如下所示:

- ② 执行安装,如下所示:
powershell
winget install --id MSYS2.MSYS2 -e --source winget1

- ③ 安装相关工具,如下所示:
bash
# 替换清华镜像源(可选)
sed -i \
"s#https\?://mirror.msys2.org/#https://mirrors.tuna.tsinghua.edu.cn/msys2/#g" \
/etc/pacman.d/mirrorlist*
# 安装相关工具链
pacman -Syu --noconfirm # 更新包管理器
pacman -Sy base-devel --noconfirm # 安装开发工具包
# 安装 UCRT 编译工具链及构建工具
pacman -Syu --noconfirm \
mingw-w64-ucrt-x86_64-toolchain \
mingw-w64-ucrt-x86_64-meson \
mingw-w64-ucrt-x86_64-cmake \
mingw-w64-ucrt-x86_64-bear \
mingw-w64-ucrt-x86_64-cunit
# 安装 Clang 编译工具链及构建工具
pacman -Syu --noconfirm \
mingw-w64-clang-x86_64-toolchain \
mingw-w64-clang-x86_64-meson \
mingw-w64-clang-x86_64-cmake \
mingw-w64-clang-x86_64-bear \
mingw-w64-clang-x86_64-cunit1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24

1.2.3 配置
1.2.3.1 概述
- 安装完毕之后,需要配置 PATH 环境变量,以便系统可以识别 CLANG。
powershell
CLANG_HOME=C:\msys64\clang64
PATH=%CLANG_HOME%\bin;%PATH%1
2
2
- PATH 环境变量分为
针对当前用户以及针对管理员两种,如下所示:
| PATH 环境变量分类 | 描述 | 备注 |
|---|---|---|
| 针对当前用户 | 当前用户有效 | 配置完成后,需要重新打开 PowerShell 窗口才能使新配置在终端中生效。 |
| 针对管理员 | 所有用户生效 |
1.2.3.2 手动版
- ① 打开
设置-->系统-->高级系统设置-->环境变量,如下所示:

- ② 在
系统变量中配置PATH环境变量,如下所示:

1.2.3.3 自动版
- 格式:
powershell
# 临时生效(仅对当前 PowerShell 窗口有效)
$env:CLANG_HOME = "C:\msys64\clang64"
$env:PATH = $env:PATH + ";$env:CLANG_HOME\bin"
# 验证配置
# 1. 查看 CLANG_HOME
$env:CLANG_HOME
# 2. 检查 clang 是否可被识别
clang --version1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
powershell
# 永久生效(针对当前用户)
# 1. 设置用户级别的 CLANG_HOME
[Environment]::SetEnvironmentVariable("CLANG_HOME", "C:\msys64\clang64", "User")
# 2. 将 %CLANG_HOME%\bin 追加到用户 PATH 的末尾
$oldUserPath = [Environment]::GetEnvironmentVariable("PATH", "User")
if ($oldUserPath -notlike "*%CLANG_HOME%\bin*") {
# 注意:确保旧 PATH 末尾有分号分隔符
$separator = if ($oldUserPath.EndsWith(";")) { "" } else { ";" }
$newUserPath = $oldUserPath + $separator + "%CLANG_HOME%\bin"
[Environment]::SetEnvironmentVariable("PATH", $newUserPath, "User")
}
# 验证配置
# 1. 查看 CLANG_HOME
$env:CLANG_HOME
# 2. 检查 clang 是否可被识别
clang --version1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
powershell
# 系统级永久生效(需要管理员权限),即:以管理员身份运行 PowerShell
# 1. 设置系统级别的 CLANG_HOME
[Environment]::SetEnvironmentVariable("CLANG_HOME", "C:\msys64\clang64", "Machine")
# 2. 将 %CLANG_HOME%\bin 追加到系统 PATH 的末尾
$oldSystemPath = [Environment]::GetEnvironmentVariable("PATH", "Machine")
if ($oldSystemPath -notlike "*%CLANG_HOME%\bin*") {
$separator = if ($oldSystemPath.EndsWith(";")) { "" } else { ";" }
$newSystemPath = $oldSystemPath + $separator + "%CLANG_HOME%\bin"
[Environment]::SetEnvironmentVariable("PATH", $newSystemPath, "Machine")
}
# 验证配置
# 1. 查看 CLANG_HOME
$env:CLANG_HOME
# 2. 检查 clang 是否可被识别
clang --version1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
- 示例:系统级永久生效(以管理员身份运行 PowerShell)
powershell
# 1. 设置系统级别的 CLANG_HOME
[Environment]::SetEnvironmentVariable("CLANG_HOME", "C:\msys64\clang64", "Machine")
# 2. 将 %CLANG_HOME%\bin 追加到系统 PATH 的末尾
$oldSystemPath = [Environment]::GetEnvironmentVariable("PATH", "Machine")
if ($oldSystemPath -notlike "*%CLANG_HOME%\bin*") {
$separator = if ($oldSystemPath.EndsWith(";")) { "" } else { ";" }
$newSystemPath = $oldSystemPath + $separator + "%CLANG_HOME%\bin"
[Environment]::SetEnvironmentVariable("PATH", $newSystemPath, "Machine")
}1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10

- 示例:验证配置(重新打开 PowerShell 窗口)
powershell
# 1. 查看 CLANG_HOME
$env:CLANG_HOME
# 2. 检查 clang 是否可被识别
clang --version1
2
3
4
5
2
3
4
5

1.3 WSL2 搭建开发环境
1.3.1 概述
- 在 Linux 中,C/C++ 也有上述的工具链,本次以 WSL2 来进行演示。
1.3.2 WSL2 安装 C/C++ 工具链
WSL2 可以安装的 Linux 非常多,本次以 AlmaLinux-9 和 Ubuntu 24.04 为例进行演示。
示例:AlmaLinux-9
bash
# 1. 更新系统并安装 dnf 核心扩展插件
sudo dnf -y update
sudo dnf install -y dnf-plugins-core epel-release
# 2. 启用 CRB (CodeReady Linux Builder) 仓库 (获取 ninja-build 等工具)
sudo dnf config-manager --set-enabled crb
# 3. 安装基础 C/C++ 开发环境与构建工具
sudo dnf groupinstall "Development Tools" -y
sudo dnf install -y \
gcc \
gcc-c++ \
gdb \
make \
cmake \
ninja-build \
pkgconf-pkg-config \
binutils \
git \
glibc-devel \
meson \
bear \
cunit-devel
# 4. 安装 Clang / LLVM 工具链 (clangd 包含在 clang-tools-extra 中)
sudo dnf install -y \
clang \
clang-tools-extra \
llvm \
lldb
# 5. 开启 debuginfo 仓库并安装 glibc 调试信息及源码
# --enablerepo 参数确保能调取 AppStream-debug 和 BaseOS-debug 源
sudo dnf debuginfo-install -y \
--enablerepo=*debug* \
glibc
sudo dnf install -y \
--enablerepo=*debug* \
glibc-debugsource1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40

- 示例:Ubuntu 24.04
bash
# 1. 开启 deb-src 源码源
sudo sed -i 's/^Types: deb$/Types: deb deb-src/' /etc/apt/sources.list.d/ubuntu.sources
# 2. 更新系统软件包列表
sudo apt update && sudo apt upgrade -y
# 3. 安装基础 C/C++ 开发环境与构建工具
sudo apt install -y \
build-essential \
gdb \
debuginfod \
cmake \
ninja-build \
pkg-config \
binutils \
git \
libc6-dev \
dpkg-dev \
meson \
bear \
libcunit1-dev
# 4. 安装 Clang / LLVM 工具链
sudo apt install -y \
clang \
clangd \
clang-tools \
llvm \
lldb
# 5. 安装 glibc 调试符号包
sudo apt install -y libc6-dbg
# 6. 静默下载 glibc 源码(消除 root 沙盒警告)
cd /usr/src
apt source glibc -o APT::Sandbox::User=root1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36

第二章:vscode 搭建 C/C++ 环境
2.1 概述
- 由于 C/C++ 分为 GCC 和 Clang 两套方案;那么,vscode 中也提供了两套方案,如下所示:
点我查看 具体细节
| 类别 | 必选插件 | 描述 |
|---|---|---|
| 方案 A | C/C++ (ms-vscode.cpptools):提供代码高亮、IntelliSense(代码补全、跳转)以及 GDB/LLDB 调试支持。 | Microsoft 官方 C/C++ 拓展包(入门首选、简单开箱即用) |
C/C++ Extension Pack (ms-vscode.cpptools-extension-pack):官方打包套装,包含 C/C++、CMake 工具等。 | ||
| 方案 B | clangd (llvm-vs-code-extensions.vscode-clangd):基于 LLVM 的代码索引工具,跳转和补全性能远超默认的 IntelliSense。 | Clangd 方案(进阶推荐、代码补全与语法检查极快) |
CodeLLDB (vadimcn.vscode-lldb):高质量的 LLDB 调试器扩展。 |

2.2 vscode 安装插件
- 需要安装以下插件,如下所示:
点我查看 具体细节
如果将 vscode 配置到 PATH 环境变量中,可以在 powershell 中执行如下命令,以便自动化安装插件:
powershell
code --install-extension ms-vscode.cpptools
code --install-extension ms-vscode.cpptools-extension-pack
code --install-extension llvm-vs-code-extensions.vscode-clangd
code --install-extension vadimcn.vscode-lldb
code --install-extension twxs.cmake
code --install-extension ms-vscode.cmake-tools1
2
3
4
5
6
2
3
4
5
6
| 插件 ID | 插件名称 | 核心作用与功能说明 |
|---|---|---|
| ms-vscode.cpptools | C/C++ | 微软官方 C/C++ 核心插件,提供基础的代码高亮、IntelliSense(代码补全与跳转)以及 GDB/LLDB 调试支持。 |
| ms-vscode.cpptools-extension-pack | C/C++ Extension Pack | 微软官方扩展包(打包方案),一键安装 C/C++、CMake Tools 以及 Remote 架构等常用开发扩展。 |
| llvm-vs-code-extensions.vscode-clangd | clangd | 基于 LLVM 的代码语言服务插件,用于替代默认的 IntelliSense。提供极速且精准的代码补全、语法检查、重构与跳转。 |
| vadimcn.vscode-lldb | CodeLLDB | 基于 LLVM/LLDB 的高性能调试扩展,常用于 Rust/C++ 调试,在处理复杂数据类型显示和表达式求值时比默认 GDB 体验更好。 |
| twxs.cmake | CMake | 为 CMakeLists.txt 文件提供基础的语法高亮、代码片段(Snippets)与自动补全支持。 |
| ms-vscode.cmake-tools | CMake Tools | 微软官方 CMake 项目管理插件。提供底部状态栏一键选择 Kit(编译器)、配置、编译(Build)、调试(Debug)与目标切换功能。 |
- 示例:手动版
txt
打开 vscode --> 点击到扩展 --> 安装上述插件1

- 示例:自动版
powershell
code --install-extension ms-vscode.cpptools
code --install-extension ms-vscode.cpptools-extension-pack
code --install-extension llvm-vs-code-extensions.vscode-clangd
code --install-extension vadimcn.vscode-lldb
code --install-extension twxs.cmake
code --install-extension ms-vscode.cmake-tools1
2
3
4
5
6
2
3
4
5
6

2.3 vscode 整合 WSL2
- ① 打开 vscode,如下所示:

- ② 点击
远程资源管理器,并打开 WSL 中的 Linux,如:AlmaLinux-9,如下所示:

- ③ 创建
.c文件,并进行调试,如下所示:
