Windows下C++环境配置:VSCode+Clangd+Cmake+Ninja
password
icon
AI summary
type
status
date
slug
summary
tags
category
AI生成的摘要
本文详细介绍了Windows下C++开发环境的配置,包括以下关键组件:
- MinGW工具链提供基础的编译工具,推荐使用其中的Clang编译器
- Clangd语言服务器实现代码补全、智能提示等IDE功能
- CMake作为跨平台构建系统,生成compile_commands.json以支持Clangd
- Ninja构建系统相比Make提供更快的编译速度
- 详细的配置说明包括VSCode设置、工具链选择及CMake使用方法
1. 依赖
(推荐)MinGW
是一个编译工具链。
mingw64里有gcc、g++、gdb、clangd、clang、lldb等多种工具, 下载UCRT runtime版本64位,解压以后将bin目录配置到系统环境变量。
在控制台依次输入命令
gcc -v
、g++ -v
、gdb -v
、clang -v
、clangd --version
、lldb --version
可验证安装效果。
Clangd
clangd 是一个能够提供代码补全、智能提示、跳转等功能的c++语言服务器,相比VSCode带的c/c++插件功能更加强大。
如何选择?
- (推荐)VSCode 的
clangd
:
如果你只需要一个轻量级、开箱即用的 Clang 语言服务器,且不依赖 MinGW 的其他组件,选择 VSCode 扩展更简单。
- 选择 MinGW 的
clangd
:
如果你已经在使用 MinGW/GCC 环境,或需要 MinGW 的 Clang 工具链(如交叉编译),选择 MinGW 的
clangd
更合适。如果要使用VSCode的Clangd,在VSCode插件商店搜索clangd下载即可。下完会弹出一个下载以及禁用之前的C/C++ Intelli Sense Engine ,都同意。
compile_commands.json是clangd等工具用来提高代码跳转、补全功能的文件,在不存在compile_commands.json时,clangd会在分析自定义头文件时报错。对于c++项目,可以采用cmake 或make的方式来构建项目,而cmake和makefile均有对应的生成compile_commands.json文件的方法。
lldb
lldb是一个开源的调试器,用于调试C、C++、Objective-C和Swift等编程语言的应用程序。它是在LLVM项目的基础上开发的,提供了强大的调试功能和交互式命令行界面。
在VSCode插件商店搜索下载CodeLLDB下载即可。
Cmake
构造工具,因为
clangd
需要读取compile_commands.json
才能提供服务
CMake 本身不直接编译代码,而是通过生成的构建系统(如
make
、ninja
)来调用编译器(如 GCC、Clang)。在VSCode插件商店搜索下载CMake Tools下载即可。
为什么不选Xmake
虽然XMake 内置了对常见编译器(如 GCC、Clang、MSVC)的支持,并自动管理依赖关系,无需额外配置生成器。
但目前大多数项目还是Cmake。
Ninja
ninja与make的作用相同,但相对于历史悠久的make来说,ninja能够更加快速地完成整个项目的编译(大概只需要make 1/4 的时间)。而cmake可以通过简单的配置来生成ninja构建所需要的文件。
- ninja的github地址: https://github.com/ninja-build/ninja/releases,找到
ninja-win.zip
,下载解压到某个路径。
- 将安装的路径配置到系统环境变量。
- 验证安装:
ninja --version
- 下文配置时会介绍怎么让cmake运行的时候自动加参数引入Ninja
工具包
有两个选择:
(推荐)1. MinGW 中的 Clang
优点:
- 跨平台兼容性:
- Clang 是 LLVM 项目的一部分,支持多平台(Windows/Linux/macOS),代码在不同平台间的移植性更好。
- 标准符合性:
- Clang 对 C++ 标准(如 C++20)的支持通常更及时,且遵循现代编译器最佳实践。
- 开源和免费:
- MinGW 是开源工具链,无需额外安装 Visual Studio。
- 错误提示友好:
- Clang 的错误信息通常更清晰、详细,有助于快速定位问题。
缺点:
- Windows 集成:
- 对 Windows 特有 API 的优化可能不如 MSVC,某些 Windows 特殊功能可能需要额外适配。
- 调试工具链:
- 调试体验可能不如 Visual Studio 的集成工具链流畅,需依赖 GDB 或其他调试器。
- 安装配置:
- 需手动安装 MinGW 或 MinGW-w64,并确保环境变量正确配置。
在VSCode中按ctrl + shift + p,输入cmake select,

选择自行下载的MinGW里的Clang配置成Cmake的工具包即可。

2. MSVC(Microsoft Visual C++)
优点:
- Windows 集成优化:
- MSVC 是微软官方的编译器,对 Windows API 和系统特性(如 Windows 内存管理、线程、DirectX 等)有更深度的优化。
- 与 Visual Studio 完全集成,提供强大的调试工具、性能分析和代码补全功能。
- 性能表现:
- 在某些场景下(尤其是 Windows 独有的优化),MSVC 生成的代码可能更快。
- 调试支持:
- 与 Visual Studio 的调试器配合使用时,调试体验更流畅,支持内联汇编、复杂的断点设置等。
- 生态支持:
- 大多数 Windows 独有的库(如 Win32、DirectX、Windows SDK)与 MSVC 完全兼容。
缺点:
- 跨平台限制:
- MSVC 主要针对 Windows 优化,跨平台开发(如 Linux/macOS)时可能需要额外配置。
- 标准符合性:
- 相比 Clang/GCC,MSVC 对 C++ 标准(尤其是较新的标准,如 C++20)的支持可能稍慢或存在差异。
- 安装依赖:
- 需要安装 Visual Studio 或单独的 MSVC 构建工具(如 Build Tools for Visual Studio )。
如果采用MSVC,下载Visual Studio生成工具,让CMake配置相应的工具包

在VSCode里指定为MSVC,这里是windos x64。

若使用MSVC,一般会在
CMakeLists.txt
里加上一些针对性的配置:2. 配置
在VSCode的
settings.json
里加入如下配置:3. CMake配置

C++编译过程
C++程序从源代码到可执行文件需要经过以下几个主要步骤:
1. 预处理(Preprocessing)
在这个阶段,编译器会:
- 处理所有的预处理指令(如
#include
、#define
、#ifdef
等)
- 展开所有的宏定义
- 删除注释
- 包含所有的头文件
预处理器会查找所有以
#
开头的指令,并根据这些指令修改源代码。例如,当遇到 #include <iostream>
时,预处理器会找到 iostream
头文件,并将其内容插入到当前文件中。关键问题:头文件在哪找?
- 系统头文件:在编译器的标准库目录中
- 自定义头文件:在项目目录或指定的包含路径中(通过Cmake指定)
2. 编译(Compilation)
编译器将预处理后的代码转换为汇编代码或目标文件(.o 或 .obj 文件)。这个步骤主要是:
- 语法分析
- 语义分析
- 代码优化
- 生成特定于目标平台的汇编代码
关键问题:哪些文件要编译?
- 通常只编译 .cpp 文件 (通过Cmake指定)
- 头文件 (.h/.hpp) 不单独编译,而是通过 #include 指令包含到 .cpp 文件中
3. 链接(Linking)
链接器将所有编译生成的目标文件和库文件链接在一起,生成最终的可执行文件:
- 解析外部符号引用
- 组合各个目标文件
- 链接所需的库文件
- 生成可执行文件(.exe、.out 等)
关键问题:
- 链接库哪找? 在系统库目录或指定的库目录中
- 链接哪些库? 程序依赖的所有外部库(如SDL2、标准库等),通过Cmake指定
编译过程中的常见问题
- 预处理阶段问题:
- 找不到头文件(
#include
找不到指定的文件) - 宏定义错误
- 编译阶段问题:
- 语法错误
- 类型不匹配
- 未声明的变量或函数
- 链接阶段问题:
- 未定义的引用(Undefined reference)
- 重复定义(Multiple definition)
- 找不到库文件
为什么需要构建系统(如CMake)
手动管理编译和链接过程在小型项目中可能还算简单,但在大型项目中会变得非常复杂:
- 需要管理大量的源文件
- 需要指定正确的编译选项
- 需要链接多个库
- 需要考虑跨平台兼容性
CMake作为一个跨平台的构建系统生成器,能够:
- 自动处理文件依赖关系
- 自动找到并配置外部库
- 生成适合不同平台和编译器的构建文件
- 提供统一的、跨平台的项目配置方式
CMake主框架

一个CMakeLists.txt示例
4. Debug
在VSCode按F5,报错缺少
langch.json
,会自动新建一个。在
langch.json
里加上可执行文件的路径之后即可正常Debug。参考
上一篇
CPU、GPU、NPU:计算世界的三位“建筑师”
下一篇
AI辅助编程:Cursor、RooCode、Github Copilot等初体验
Loading...