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 -vg++ -vgdb -vclang -vclangd --versionlldb --version 可验证安装效果。
notion image

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.jsonclangd等工具用来提高代码跳转、补全功能的文件,在不存在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 本身不直接编译代码,而是通过生成的构建系统(如 makeninja)来调用编译器(如 GCC、Clang)。
 
在VSCode插件商店搜索下载CMake Tools下载即可。

为什么不选Xmake

虽然XMake 内置了对常见编译器(如 GCC、Clang、MSVC)的支持,并自动管理依赖关系,无需额外配置生成器。
但目前大多数项目还是Cmake。

Ninja

ninja与make的作用相同,但相对于历史悠久的make来说,ninja能够更加快速地完成整个项目的编译(大概只需要make 1/4 的时间)。而cmake可以通过简单的配置来生成ninja构建所需要的文件。
  • 将安装的路径配置到系统环境变量。
  • 验证安装: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,
notion image
选择自行下载的MinGW里的Clang配置成Cmake的工具包即可。
notion image

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)的支持可能稍慢或存在差异。
如果采用MSVC,下载Visual Studio生成工具,让CMake配置相应的工具包
notion image
在VSCode里指定为MSVC,这里是windos x64。
notion image
若使用MSVC,一般会在CMakeLists.txt里加上一些针对性的配置:

2. 配置

在VSCode的settings.json里加入如下配置:
 

3. CMake配置

notion image

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指定

编译过程中的常见问题

  1. 预处理阶段问题
      • 找不到头文件(#include 找不到指定的文件)
      • 宏定义错误
  1. 编译阶段问题
      • 语法错误
      • 类型不匹配
      • 未声明的变量或函数
  1. 链接阶段问题
      • 未定义的引用(Undefined reference)
      • 重复定义(Multiple definition)
      • 找不到库文件

为什么需要构建系统(如CMake)

手动管理编译和链接过程在小型项目中可能还算简单,但在大型项目中会变得非常复杂:
  • 需要管理大量的源文件
  • 需要指定正确的编译选项
  • 需要链接多个库
  • 需要考虑跨平台兼容性
CMake作为一个跨平台的构建系统生成器,能够:
  • 自动处理文件依赖关系
  • 自动找到并配置外部库
  • 生成适合不同平台和编译器的构建文件
  • 提供统一的、跨平台的项目配置方式
 

CMake主框架

notion image
 

一个CMakeLists.txt示例

4. Debug

在VSCode按F5,报错缺少langch.json,会自动新建一个。
langch.json 里加上可执行文件的路径之后即可正常Debug。
 

参考

 
上一篇
‌CPU、GPU、NPU:计算世界的三位“建筑师”
下一篇
AI辅助编程:Cursor、RooCode、Github Copilot等初体验
Loading...