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
2
3
@echo off
call "C:\Program Files (x86)\Microsoft Visual Studio\2022\BuildTools\Common7\Tools\VsDevCmd.bat" -arch=x64
code .

把脚本内容的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 版本

参考:在Windows下使用CMake构建和管理第三方库

建议添加环境变量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
2
3
git clone https://github.com/microsoft/vcpkg.git C:\Program Files\vcpkg
cd C:\Program Files\vcpkg
.\bootstrap-vcpkg.bat

(可选)让 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
2
3
4
5
6
7
8
9
10
{
"cmake.configurePresets": ["msvc-ninja"],
"cmake.buildPresets": ["msvc-ninja-build"],
"cmake.generator": "Ninja",
"cmake.useCMakePresets": "always",
"cmake.configureOnOpen": true,
"C_Cpp.default.compilerPath": "C:/Program Files (x86)/Microsoft Visual Studio/2022/BuildTools/VC/Tools/MSVC/14.44.35207/bin/Hostx64/x64/cl.exe",
"C_Cpp.default.intelliSenseMode": "windows-msvc-x64",
"C_Cpp.default.configurationProvider": "ms-vscode.cmake-tools"
}

.vscode/tasks.json

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
{
"version": "2.0.0",
"tasks": [
{
"label": "CMake: Configure",
"type": "shell",
"command": "cmake --preset=msvc-ninja",
"group": "build",
"presentation": {
"reveal": "always"
}
},
{
"label": "CMake: Build",
"type": "shell",
"command": "cmake --build build",
"group": "build",
"dependsOn": ["CMake: Configure"]
}
]
}

.vscode/launch.json

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
{
"version": "0.2.0",
"configurations": [
{
"name": "MSVC Debug",
"type": "cppvsdbg",
"request": "launch",
"program": "${workspaceFolder}/build/fmt-demo.exe",
"args": [],
"stopAtEntry": false,
"cwd": "${workspaceFolder}",
"environment": [],
"console": "integratedTerminal"
}
]
}

CMakeLists.txt

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
cmake_minimum_required(VERSION 3.25)

project(fmt-demo LANGUAGES CXX)

set(CMAKE_CXX_STANDARD 20)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

# ✅ 关键:让 vcpkg toolchain 生效
if(DEFINED ENV{VCPKG_ROOT})
set(CMAKE_TOOLCHAIN_FILE "$ENV{VCPKG_ROOT}/scripts/buildsystems/vcpkg.cmake"
CACHE STRING "")
endif()

find_package(fmt CONFIG REQUIRED)

add_executable(fmt-demo
src/main.cpp
)

target_link_libraries(fmt-demo
PRIVATE fmt::fmt
)

CMakePresets.json

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
{
"version": 6,
"configurePresets": [
{
"name": "msvc-ninja",
"displayName": "MSVC + Ninja",
"generator": "Ninja",
"binaryDir": "${sourceDir}/build",
"toolchainFile": "$env{VCPKG_ROOT}/scripts/buildsystems/vcpkg.cmake",
"architecture": {
"value": "x64",
"strategy": "external"
},
"cacheVariables": {
"CMAKE_BUILD_TYPE": "Release",
"VCPKG_TARGET_TRIPLET": "x64-windows",
"CMAKE_C_COMPILER": "cl",
"CMAKE_CXX_COMPILER": "cl"
},
"environment": {
"VCPKG_ROOT": "D:/vcpkg"
}
}
]
}

vcpkg.json

1
2
3
4
5
{
"name": "fmt-demo",
"version": "1.0.0",
"dependencies": ["fmt"]
}

src/main.cpp

1
2
3
4
5
6
#include <fmt/core.h>

int main() {
fmt::print("Hello from fmt + MSVC + vcpkg!\n");
return 0;
}

.gitignore(可选)

1
/build

README.md(可选)

1
2
3
# 构建

通过插件使用“Ctrl + Shift + P”找到“Delete Cache, Reconfigure and Build”

配置、构建

在所有环境都配置正常的情况下,在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 进行许可。