VSCode配置C++环境(MSVC + CMake + Ninja + vcpkg)

之前写过一篇VSCode配置C++环境,但是由于 MinGW 的编译器在 Windows 上编译编译问题频出,所以打算换成 windows 自己的 MSVC 编译器。
VSCode插件安装
在插件商店搜索以下插件直接安装:
- C/C++ Extension Pack(包含以下插件)
- C/C++
- C/C++Themes
- C/C++ DevTools
- CMake Tools
- (可选)C/C++ Project Generator(用于创建C/C++项目结构)
MSVC安装
本次的核心配置,作用是提供一个Windows的编译器和Windows SDK。
安装Windows自己的编译器和SDK。由于我们不使用VS(即Visual Studio)来开发,而是使用VSCode(即Visual Studio Code),所以仅需要安装Visual Studio Build Tools(即Visual Studio 生成工具)。

下载网址:Visual Studio 2022 Build Tools 安装 。找到里面的生成工具下载。
因为2022版本相对稳定,所以选择2022版本

下载完成后,会安装Visual Studio Installer(即Visual Studio 安装器),然后安装器自动打开后会弹出一个安装生成工具的弹窗,在这里面选择你要安装的组件。
选择使用C++的桌面开发,然后在右侧选择:
- MSVC 生成工具(具体名字根据你安装的版本而定)
- Windows SDK(根据你安装的版本选择相应的SDK)
而下面这两个不用选中,我们后面会单独安装:
- CMake工具
- vcpkg包管理器
选择完毕后,在默认路径(一般是C盘)安装即可。
因为只选择了核心功能,所以安装包会比较小,而默认装在C盘,也会方便其他应用寻找
注入环境
生成工具默认不会自动注入环境变量,这是为了避免污染环境,如果要使用MSVC的环境,需要在x86 Native Tools Command Prompt for VS 2022中使用。
为了在VSCode中也可以使用生成工具的环境,可以工作目录创建一个脚本vsdevcmd.bat,内容如下:
1 | @echo off |
把脚本内容的VsDevCmd.bat地址改为你自己的VsDevCmd.bat地址。
脚本内容的意思是在当前目录注入MSVC的环境变量,然后通过VSCode打开当前目录。
双击vsdevcmd.bat即可打开VSCode,并使用生成工具的环境。
使用cl命令可以查看是否注入成功:
1 | cl |
CMake安装
CMake是一个跨平台的构建系统生成工具,它并不直接编译代码,而是根据CMakeLists.txt中的配置生成对应平台的构建文件(如Ninja的build.ninja、MSVC的.sln等),再由底层构建工具完成实际的编译和链接。它的核心作用包括:
- 跨平台构建:同一套
CMakeLists.txt配置可在Windows、Linux、macOS上生成对应的构建文件 - 管理编译选项:统一配置编译器标志、头文件路径、链接库等
- 依赖管理:查找和引入系统或第三方库(如通过
find_package) - 项目组织:支持多目录、多目标(可执行文件/库)的项目结构
- 与工具链集成:可配合Ninja、MSBuild等构建工具,以及vcpkg等包管理器使用
安装 CMake4.3.2 版本
建议添加环境变量CMAKE_ROOT为你的CMake安装路径,例如:C:\Program Files\CMake\bin,然后在Path中添加%CMAKE_ROOT%。
Ninja安装
Ninja 是一个由 Google 工程师 Evan Martin 开发的小型构建系统,最初是为了解决 Chrome 浏览器的超大规模构建速度问题。它的设计理念是:把复杂的构建逻辑交给上层工具(如 CMake),自己只专注于极速执行。
- 执行构建任务:读取由 CMake 生成的 build.ninja 文件,调用编译器(如 MSVC 的 cl.exe、GCC、Clang)实际执行编译、链接等操作。
- 加速编译流程:通过极快的文件解析和高效的并行调度,显著缩短「修改代码 → 编译完成」的等待时间,尤其在中大型项目中效果明显。
- 极速启动:构建文件格式扁平简单,无函数、无条件判断,解析速度比 Make 快几个数量级。
- 原生并行编译:自动检测 CPU 核心数,启动最优数量的并行编译任务,无需手动指定 -j 参数。
- 精准增量构建:通过文件时间戳和内容哈希判断依赖变化,只重新编译必要的文件,未修改的文件直接跳过。
- 跨平台原生支持:原生支持 Linux、macOS、Windows,在 Windows 上无需 MSYS2 或 Cygwin 模拟环境。
- 刻意保持简单:Ninja 故意不提供编译器检测、平台适配等功能,把这些复杂逻辑完全交给 CMake 等上层工具,自己只做”执行一件事,且做到极致。
- 简洁的输出:默认只显示进度条和错误信息,减少噪音;加上 -v 参数才显示详细编译命令,便于调试。
- 被主流项目采用:Chrome、Android、LLVM、React Native 等超大型项目均使用 Ninja 作为构建执行器,经过海量实践验证。
安装 Ninja1.13.2 版本
- 使用pip安装:
pip install ninja==1.13.2
如果pip找不到1.13.2版本,看下面的备用选项 - 官网下载
找到1.13.2版本的windows的zip包,然后建议使用迅雷下载 - 备用:百度网盘下载
建议添加环境变量NINJA_ROOT为你的Ninja安装路径,例如:C:\Program Files\Ninja,然后在Path中添加%NINJA_ROOT%。
vcpkg安装
vcpkg 是由微软开发的 C/C++ 包管理器,最初于 2016 年开源发布。它的目标是解决 C/C++ 生态中”第三方库难装、难管、难移植”的长期痛点,让开发者像使用 npm、pip 一样简单地管理 C++ 依赖。一句话总结,vcpkg = C++ 版的 npm,让第三方库的安装和管理从”痛苦手工活”变成”一条命令搞定”。
- 跨平台原生支持:同一套命令在 Windows、Linux、macOS 上均可使用,配合 CMake Toolchain 文件可实现真正的跨平台构建。
- 与 CMake 深度集成:通过 -DCMAKE_TOOLCHAIN_FILE=… 参数,CMake 可以自动从 vcpkg 安装的库中查找头文件和链接库,无需手动指定路径。
- 支持静态库和动态库切换:通过 VCPKG_TARGET_TRIPLET 可以轻松切换编译静态库(.lib/.a)或动态库(.dll/.so),如 x64-windows 与 x64-windows-static。
- 拥有庞大的库生态:官方仓库包含 2000+ 个开源库(如 OpenCV、Boost、SQLite、curl 等),且持续快速增长,覆盖绝大多数常见需求。
- 支持版本约束:通过 vcpkg.json 的 version>= 或基线(baseline)机制,可以锁定依赖版本,确保构建的可复现性。
- 自动处理依赖传递:安装一个库时,vcpkg 会自动递归安装其依赖的所有子库,并正确处理链接顺序,无需手动干预。
- 支持自定义端口(Overlay Ports):允许用自定义的端口定义覆盖官方仓库的库定义,方便引入私有库或修改编译选项。
- 微软官方维护,质量有保障:由微软 C++ 团队持续维护,与 MSVC、Visual Studio、CMake Tools 等工具链深度协同,稳定性高。
安装最新版 vcpkg,需要Git(自行下载)
1 | git clone https://github.com/microsoft/vcpkg.git C:\Program Files\vcpkg |
(可选)让 Visual Studio/MSBuild 自动识别已安装库
1 | vcpkg integrate install |
建议添加环境变量VCPKG_ROOT为你的Ninja安装路径,例如:C:\Program Files\vcpkg,然后在Path中添加%VCPKG_ROOT%。
PowerShell7安装
PowerShell 7(简称 PS7,内部版本号 PowerShell Core 7.x)是微软推出的跨平台命令行 Shell 和脚本语言,于 2020 年正式发布。它基于 .NET Core 构建,取代了早期的 Windows PowerShell 5.1,可在 Windows、Linux、macOS 上运行。对于 C++ 开发者而言,PS7 是启动 MSVC 编译环境、编写构建脚本的重要工具。
- 作为 MSVC 的开发环境启动器:MSVC 的编译器(cl.exe)、链接器(link.exe)等工具需要配置特殊的环境变量才能使用,PS7 是运行 vcvars64.bat 等环境初始化脚本的载体,启动后才能在终端中直接调用 MSVC 工具链。
- 作为构建自动化脚本的执行引擎:PS7 可以编写功能强大的构建脚本(.ps1),替代传统的 .bat/.cmd 批处理文件,实现更复杂的编译、测试、打包流程控制。
- 原生支持运行:vcvars*.bat 初始化 MSVC 环境 PS7 可以直接调用 vcvars64.bat(位于 VS 安装目录),该脚本会设置 PATH、INCLUDE、LIB 等关键环境变量,使 cl.exe 在当前会话中可用。这是使用 MSVC 命令行编译的前提。
- 更好的脚本语法,替代.bat 编写构建脚本:相比古老的批处理语法,PS7 支持函数、异常处理(try/catch)、管道对象传递等现代语法,适合编写复杂的 MSVC 构建流程脚本。
- 跨平台一致性,方便未来迁移到 Linux 构建:PS7 本身跨平台,虽然 MSVC 只存在于 Windows,但构建脚本的逻辑可以在 PS7 上统一编写,部分逻辑未来可复用至 Linux 上的 GCC/Clang 构建。
- 与 CMake、Ninja、vcpkg 命令行无缝协作:PS7 的管道和命令调用机制对现代命令行工具支持更好,在 PS7 中运行 cmake、ninja、vcpkg 命令的输出格式更清晰,错误信息更易捕获和处理。
- 支持 Tab 补全,提升 MSVC 工具链命令输入效率:PS7 原生支持命令和参数的 Tab 自动补全,配合 posh-git 等模块,在输入 cl.exe、link.exe 相关命令时效率更高。
- 更好的 UTF-8 支持,避免中文路径/输出乱码:Windows 传统控制台对 UTF-8 支持不佳,PS7 默认使用 UTF-8 编码,在处理含有中文路径的 MSVC 项目时更少出现乱码问题。
- 可以直接作为 VSCode 的集成终端:VSCode 可以配置 PS7 作为默认终端,配合 CMake Tools 插件,在 PS7 会话中自动激活 MSVC 环境后执行构建,实现”打开项目即能编译”的体验。
- 支持 Profile 配置文件,自动初始化 MSVC 环境:可以在 PS7 的 $PROFILE 文件中添加自动加载 vcvars64.bat 的逻辑,使得每次打开 PS7 终端时自动配置好 MSVC 环境,无需手动运行。
安装 Powershell7.6 版本
建议添加环境变量PWSH_ROOT为你的Ninja安装路径,例如:C:\Program Files\powershell,然后在Path中添加%PWSH_ROOT%。
项目目录结构
- .vscode/
- settings.json
- tasks.json
- launch.json
- CMakeLists.txt
- CMakePresets.json
- vcpkg.json
- src/
- main.cpp
- vsdevcmd.bat(参考注入环境)
- .gitignore(可选)
- README.md(可选)
.vscode/settings.json
1 | { |
.vscode/tasks.json
1 | { |
.vscode/launch.json
1 | { |
CMakeLists.txt
1 | cmake_minimum_required(VERSION 3.25) |
CMakePresets.json
1 | { |
vcpkg.json
1 | { |
src/main.cpp
1 |
|
.gitignore(可选)
1 | /build |
README.md(可选)
1 | # 构建 |
配置、构建
在所有环境都配置正常的情况下,在VSCode中使用Ctrl + Shift + P调出命令面板,然后找到插件命令Delete Cache, Reconfigure and Build来配置和构建应用。(记得将项目中的build目录删除,否则会因为缓存出现问题)
- 标题: VSCode配置C++环境(MSVC + CMake + Ninja + vcpkg)
- 作者: 木头的喵喵拖孩
- 创建于: 2026-06-08 21:51:28
- 更新于: 2026-06-08 23:36:20
- 链接: https://blog.xx-xx.top/2026/06/08/VSCode配置C-环境(MSVC-CMake-Ninja-vcpkg)/
- 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。