
很多玩 C 的朋友都经历过这种尴尬项目写到一半需要用 JSON 解析库打开浏览器搜索下载解压配置 include 路径折腾两小时才想起来还要连一个网络库接着又是一轮手动配置。更崩溃的是换一台电脑同样的流程再走一遍。vcpkg 就是来解决这个问题的。它是微软开源的 C 包管理器一条命令帮你把依赖的下载、编译、集成全做完Windows、Linux、macOS 都能用。这篇文章我会从一个实际踩坑者的角度把 vcpkg 的上手流程、与 CMake/VS Code 的集成方式、以及那些网上教程很少讲清楚的高频报错一次性讲透。适合所有正在用 C 写项目、或者正被第三方库搞到头疼的开发者。1. 为什么 C 开发者需要 vcpkg包管理的老大难问题先聊点背景不然你可能不知道这个工具到底解决的是什么。Python 有 pipNode 有 npmRust 有 cargo但 C 很长一段时间没有一个官方认可的包管理器。你可能会说那我手动下载不就行了是单个库确实能手动搞定但一旦项目依赖七八个库每个库又依赖另外两三个库依赖树一展开手动管理就变成了一场灾难。1.1 C 开发者的依赖焦虑我见过太多人包括早年的我自己在 Windows 上装 OpenCV 的场景先找到官方编译好的 Release 包下载几十 MB 的压缩包解压后手动在 VS 里配置包含目录、库目录、附加依赖项折腾一晚上终于跑通了。然后换了一台电脑或者从 Debug 切到 Release所有配置再重来一遍。这还不算最痛苦的。最痛苦的是当你需要两个库互相依赖时比如 A 库依赖 B 库的某个特定版本而 B 库又依赖 C 库的特定版本。手动管理这种依赖链基本等于给自己挖坑。而且 Windows 上的 C 库不像 Linux 有系统包管理器统一管理各种库的编译方式、运行时配置都五花八门。1.2 为什么偏偏是 vcpkgC 领域其实有不止一个包管理器比较有名的还有 Conan、vcpkg、Build2。我最终选择 vcpkg 作为主力理由很直接微软官方维护更新频率高目前收录的库数量已经超过 2500 个日常开发要用的基本都能找到。与 Visual Studio 和 CMake 的集成是原生级的一条命令就能让 VS 自动感知头文件和库路径。跨平台支持同一个 manifest 文件在 Windows、Linux、macOS 上都能用团队协作时不会因为系统不同而互相折腾。社区活跃遇到问题很容易搜到解决方案。当然 vcpkg 也有它的缺点最明显的就是默认源码编译装一个库可能要等很久。这一点我后面会专门讲怎么优化。但综合来看对于大多数 C 项目vcpkg 是上手成本最低、集成最无痛的方案。2. 极速上手下载、编译、安装第一条依赖说再多不如实际操作。这一节带你把 vcpkg 装好然后装出你的第一个第三方库。2.1 三步完成安装vcpkg 本身不需要安装程序本质上是把一份源码克隆到本地然后执行引导脚本编译出 vcpkg 可执行文件。git clone https://github.com/microsoft/vcpkg.git cd vcpkg .\bootstrap-vcpkg.batLinux 和 macOS 上第三步是./bootstrap-vcpkg.sh。引导过程会编译 vcpkg 自身需要你的机器上有 CMake 和 C 编译器。Windows 上如果你还没装 VS这一步就可能直接报错这也是很多人第一次接触 vcpkg 就劝退的地方——别急第 4 节会讲怎么处理。编译完成后我建议把 vcpkg 目录加入环境变量VCPKG_ROOT并把vcpkg.exe所在路径加到 PATH 里。加 PATH 是为了之后在任何目录都能直接敲vcpkg命令加VCPKG_ROOT是为了让 CMake 能通过环境变量找到工具链文件后面集成 CMake 时会用到。2.2 第一条安装命令与常用 triplet 说明装库的命令很简单vcpkg install fmt spdlog这是我在新环境里测试必用的两个库fmt 是格式化输出库spdlog 是日志库。如果一切顺利你会看到 vcpkg 自动下载源码、配置 CMake、编译、安装最后输出类似这样fmt is installed. spdlog is installed.但这里有个新手很容易忽略的关键点triplet。triplet 表示目标环境默认值通常是当前系统下的动态库模式比如 Windows 上是x64-windows。如果你需要 32 位库得显式指定vcpkg install fmt:x86-windows常用 triplet 对照关系如下triplet含义适用场景x64-windowsWindows x64 动态库大多数 Windows 项目默认选择x86-windowsWindows x86 动态库需要 32 位程序时x64-windows-staticWindows x64 静态库静态 CRT希望程序无需携带 DLL、便于分发x64-windows-static-mdWindows x64 静态库动态 CRT静态链接库但依然依赖系统运行时x64-linuxLinux x64 动态库Linux 环境x64-osxmacOS x64 动态库macOS 环境为什么单独强调 triplet因为很多人在一台机器上同时装了 32 位和 64 位库如果没有显式指定编译链接时就会出现莫名其妙的LNK2019或者LNK2001错误。这类问题十个里有八个是架构不匹配导致的。2.3 理解 vcpkg 的经典模式与目录结构默认的vcpkg install是经典模式把库装到 vcpkg 目录下全局生效所有项目都能用。装完后库文件会分散在几个核心目录中installed/triplet/include头文件installed/triplet/lib库文件.lib / .dll / .a / .sopackages每个库单独的解包目录用于调试和查看具体内容了解这个结构非常重要因为当你用 CMake 或者手动配置项目时要知道去哪找头文件和库文件。网上很多报错明明装了库却找不到头文件根源就是 include 路径配错了或者根本没有把 vcpkg 的安装路径告诉编译器。3. 集成 CMake 与 VS Code装完库怎么让项目真正用上很多人以为vcpkg install完就大功告成了直接去写代码然后编译结果头文件找不到、链接失败于是得出结论vcpkg 是垃圾。实际上 vcpkg 的思路是把库装好和让项目用上库是两个独立的步骤第二步不做前面全白搭。3.1 为什么装了库项目还是找不到头文件默认情况下编译器和构建系统不会自动知道 vcpkg 的安装位置。在 VS 里跑原生 MSBuild 项目需要执行一次集成在 CMake 项目里需要显式传入工具链文件。这就像你买好了菜安装库但不告诉厨师编译器怎么做菜就是一堆生鲜而已。3.2 VS 集成vcpkg integrate install如果你用 Visual Studio 开发这一步最简单vcpkg integrate install执行完以后VS 会自动感知 vcpkg 已安装的所有库新建项目后直接#include就能用不需要手动配置任何包含目录和库目录。这个命令的实质是生成一个vcpkg.targets属性文件并注册到 VS 的用户级配置中。我个人的经验是这条命令只对当前 Windows 用户生效换一个 Windows 账户或者换一台机器需要重新执行。如果是 CI 环境可以用vcpkg integrate install的方式让构建机也感知 vcpkg 库但更推荐的做法是用 CMake 工具链因为可移植性更好。3.3 CMake 集成toolchain 文件是核心CMake 项目才是 vcpkg 的主场。核心参数是CMAKE_TOOLCHAIN_FILEcmake -B build -S . -DCMAKE_TOOLCHAIN_FILE$VCPKG_ROOT/scripts/buildsystems/vcpkg.cmake第一次配置时CMake 会执行 vcpkg 的 toolchain 脚本自动把installed/triplet下的路径加到 include 和 link 搜索路径里。项目里用find_package就能找到对应库cmake_minimum_required(VERSION 3.15) project(vcpkg_demo) find_package(fmt CONFIG REQUIRED) find_package(spdlog CONFIG REQUIRED) add_executable(demo main.cpp) target_link_libraries(demo PRIVATE fmt::fmt spdlog::spdlog)注意这里的细节大多数 vcpkg 库都提供 CMake config 文件所以find_package后面跟上CONFIG关键字通常能避免跳到模块模式下找不到库。如果你不确定库导出的目标名去installed/triplet/share/库名目录下看*Config.cmake文件里面写得很清楚。3.4 VS Code 里把 C/C 环境彻底调通VS Code 的情况稍微复杂一点因为它本身是个编辑器编译工作实际上由你的编译器和 CMake 完成。热搜词里vscode 配置 c/c 环境被刷了很多次我猜不少人是卡在了 IntelliSense 和 CMake Tools 的配合上。如果你的 VS Code 用 CMake Tools 插件来构建最干净的做法是在设置里配置cmake.configureSettings{ cmake.configureSettings: { CMAKE_TOOLCHAIN_FILE: ${env:VCPKG_ROOT}/scripts/buildsystems/vcpkg.cmake } }这样每次加载 CMake 项目时都会自动带上传工具链。如果只是写纯 C 文件、用 task 里的 cl.exe 或 g 手动编译那就需要手动把 vcpkg 的 include 路径写进c_cpp_properties.json{ configurations: [ { name: Win64, includePath: [ ${workspaceFolder}/**, ${env:VCPKG_ROOT}/installed/x64-windows/include ], defines: [], compilerPath: C:/Program Files/Microsoft Visual Studio/2022/Community/VC/Tools/MSVC/14.40.33807/bin/Hostx64/x64/cl.exe, cStandard: c17, cppStandard: c17, intelliSenseMode: windows-msvc-x64 } ] }说实话手动维护c_cpp_properties.json很容易出错特别是 compilerPath 里的 MSVC 版本号会随 VS 更新而变化。我建议还是以 CMake CMake Tools 为主让工具链文件统一管理 include 路径IntelliSense 的配置让它通过编译命令自动生成省心得多。4. 高频报错的完整排查链路从 MSVC 版本到 Redistributable这一节是全文的硬核部分。不管是 vcpkg 社区还是各个 C 交流群里总有新人反复踩同样的坑。我把几个出现频率最高的报错按排查链路完整展开希望你遇到的时候能直接抄答案。4.1 报错一error: microsoft visual c 14.0 or greater is required这是 vcpkg 新手最常撞到的墙。第一次执行bootstrap-vcpkg.bat或者vcpkg install时控制台直接红字报错error: microsoft visual c 14.0 or greater is required. get it with microsoft visual c build tools很多人的第一反应是我没有安装 VC。于是去下载了 Visual C Redistributable装完再跑发现还是报同样的错。这里必须澄清一个关键概念MSVC Build Tools编译工具链包括编译器 cl.exe、链接器 link.exe、标准库头文件等vcpkg 在 Windows 上编译库时必须用到它。Visual C Redistributable运行时库包括 msvcp140.dll、vcruntime140.dll 等是程序运行时不装就跑不起来的组件。Redistributable 只是运行时不能代替编译工具链。vcpkg 报的 Visual C 14.0 or greater 指的是前者不是后者。排查步骤如下打开 Visual Studio Installer确认安装的版本是 VS 2015 或更高VS 2015 对应的工具集版本就是 14.0这也是为什么报错里总说 14.0。确认已勾选使用 C 的桌面开发工作负载。只装了 C# 或者其他负载是不行的。如果你不想装完整版 VS可以只装 Build Tools选择使用 C 的桌面开发即可。装完后重启终端窗口让环境变量刷新再跑 vcpkg。注意VS Code 不等于编译器。VS Code 只是个编辑器它本身不能编译 C。你在 VS Code 里写代码编译靠的还是系统里的 MSVC、GCC 或 Clang。4.2 报错二VSCode 配置 C/C 环境时的误区和 Redistributable 混淆和热搜词里出现的visual c redistributable aio、已检测到匹配的 visual c redistributable, 跳过安装 解压缩: c:\users\administ...类似很多人在装软件或者配置环境时会遇到安装程序提示检测到匹配的 Visual C Redistributable跳过安装。这句话本身不是错误它是某个安装包在检测到系统已有对应版本的 VC 运行库后自动跳过的提示。但问题来了为什么程序还是起不来最典型的原因是系统里虽然有 Redistributable但版本太低或者只有 32 位而程序是 64 位的。排查时打开控制面板 - 程序和功能按Microsoft Visual C筛选检查以下几项是否同时存在 2015-2022 版本的 x64 和 x86 运行库是否需要 2013、2012、2010 等更早版本的运行库老程序常见需要特别注意 2015-2022 这个合体版本从 VS 2015 到 VS 2022Redistributable 的主版本号都是 14.x微软把它们统一打包成vc_redist.x64.exe而不是每个 VS 版本一个独立运行库。如果你用 vcpkg 编译了一个程序部署到别的机器上提示缺少msvcp140.dll直接装最新的 Microsoft Visual C Redistributable2015-2022基本都能解决。如果你希望程序完全不依赖这些运行库那就得在 vcpkg 里改用静态库 triplet比如x64-windows-static。4.3 报错三找不到头文件与链接失败C1083 / LNK2019这类报错往往出现在你已经成功vcpkg install了好几个库之后。写代码时输入#include fmt/format.h编译报fatal error C1083: 无法打开包括文件: fmt/format.h: No such file or directory或者编译过了但链接时报了一堆LNK2019: 无法解析的外部符号。这两个问题本质是同一个构建系统没有正确拿到 vcpkg 的头文件路径和库文件路径。排查链路如下确认当前项目用的是 CMake 且传入CMAKE_TOOLCHAIN_FILE参数。如果不确定看 CMakeCache.txt 里的CMAKE_TOOLCHAIN_FILE变量是否指向 vcpkg.cmake。确认 CMake 配置时的 triplet 和你vcpkg install的 triplet 一致。如果你安装的是x64-windows却在 CMake 里让工具链默认走了x86-windows头文件路径自然找不到。检查包名是否匹配。比如安装的是gtest但在 CMake 里用的可能是find_package(GTest CONFIG REQUIRED)注意大小写和命名空间的差异。vcpkg 里不少库的 CMake 目标名和包名不完全一致。如果用了 VS 原生项目非 CMake确认执行过vcpkg integrate install。没执行的话VS 根本不会把 vcpkg 的路径加进去。提示最笨但最有效的办法是在 CMakeLists.txt 里临时输出一下CMAKE_PREFIX_PATH看它是否包含vcpkg/installed/triplet。如果没有就是工具链没传进去。4.4 整体排查思路从环境变量到工具链的自检清单当你遇到任何 vcpkg 相关报错时按下面顺序逐项排查通常能在五分钟内定位问题环境变量终端里执行echo $env:VCPKG_ROOTWindows或echo $VCPKG_ROOTLinux/macOS确认指向 vcpkg 根目录。工具链存在性检查$VCPKG_ROOT/scripts/buildsystems/vcpkg.cmake是否存在。文件不存在说明克隆不完整或者目录搞错了。编译器可用性Windows 上执行cl看是否能弹出 MSVC 编译器版本信息。不能的话说明 VS 或 Build Tools 没装好。triplet 一致性执行vcpkg list查看已安装库的 triplet和构建时使用的 triplet 对比。CMake Cache如果项目已经配置过改完工具链后必须删除build目录重新配置因为 CMake 会把第一次配置的路径缓存住直接重新 configure 不会自动更新。我把这些整理成一张表你可以把它截下来当排查手册现象大概率原因首选解决方案bootstrap 时报缺少 MSVC未安装 VS/Build Tools 或缺少 C 负载安装 Build Tools 并勾选使用 C 的桌面开发vcpkg install 下载/编译特别慢源码编译需要时间且网络波动配置二进制缓存和资产缓存镜像见 5.4 节CMake 里 find_package 找不到库未传工具链或 triplet 不一致指定CMAKE_TOOLCHAIN_FILE确认 tripletVS 原生项目找不到库未执行 VS 集成vcpkg integrate install运行时缺 DLL动态库模式下程序需要携带 DLL安装 Redistributable或改静态库 triplet5. 进阶玩法manifest 模式、triplet 定制与构建加速如果你只是单个库试玩经典模式足够了。但放到真实项目里我强烈建议你用 manifest 模式。它解决的是经典模式的几个硬伤团队协作时依赖版本不一致、不同项目之间依赖互相污染、无法在 CI 里复现构建环境。5.1 经典模式的两个边界问题经典模式把所有库装进同一个 vcpkg 根目录简单粗暴。但遇到下面两种情况就头疼了项目 A 需要 fmt 8.0项目 B 需要 fmt 9.0同一个 vcpkg 目录只能装一个版本。代码库提交后新同事git clone下来不知道装了哪些依赖、什么版本只能靠文档手动vcpkg install。manifest 模式从根本上解决这两个问题每个项目在自己根目录放一个vcpkg.json声明依赖和版本约束。只要是这个项目vcpkg 就会自动读取并安装对应依赖。5.2 manifest 模式把依赖声明写进工程在项目根目录创建vcpkg.json{ name: my-project, version: 1.0.0, dependencies: [ fmt, spdlog, nlohmann-json ] }然后继续用带工具链的 CMake 命令配置项目cmake -B build -S . -DCMAKE_TOOLCHAIN_FILE$VCPKG_ROOT/scripts/buildsystems/vcpkg.cmakeCMake configure 阶段会自动检测到vcpkg.json并把依赖装好。装好的库被放在build/vcpkg_installed目录下只对当前项目可见不会再全局污染。这个模式还有两个很实用的关键词builtin-baseline和overrides。builtin-baseline指定 vcpkg 仓库 commit用来锁定所有库的基础版本overrides可以强制某个库使用特定版本{ dependencies: [ fmt, spdlog ], builtin-baseline: 6f1ddd6b6878e7e8d70c6c6b7e2d3d5f9978e10f, overrides: [ { name: fmt, version: 9.1.0 } ] }使用 version 约束时vcpkg 会进行版本解析和依赖冲突检查这一套机制已经非常接近现代包管理器了。团队协作时把vcpkg.json提交到仓库所有成员cmake -B build就能拿到完全一致的依赖。5.3 定制 triplet 和版本锁定vcpkg 允许你在项目的vcpkg-triplets目录下放自定义 triplet 文件文件名比如x64-windows-custom.cmake。典型场景是公司内部统一要求使用静态链接、release-only 的库就可以自定义一个 tripletset(VCPKG_TARGET_ARCHITECTURE x64) set(VCPKG_CRT_LINKAGE dynamic) set(VCPKG_LIBRARY_LINKAGE static) set(VCPKG_BUILD_TYPE release)然后在构建时传给 vcpkgvcpkg install fmt --triplet x64-windows-custom自定义 triplet 的语义一定要检查清楚特别是VCPKG_LIBRARY_LINKAGE和VCPKG_CRT_LINKAGE这两个变量的组合。前者控制库本身是静态库还是动态库后者控制 C 运行时是动态链接还是静态链接。混合错乱是链接错误的重灾区比如你用/MT编译程序但库是用/MD编译的就会在链接时报LIBCMT.lib和MSVCRT.lib冲突。5.4 构建缓存、并行编译与二进制源加速vcpkg 默认是源码编译第一次装一个大型库比如 OpenCV等上半小时很正常。但有几个优化手段可以显著提速设置二进制缓存vcpkg 会把编译产物缓存到默认目录下次或者另一台机器直接用缓存无需重编译。也可以通过环境变量VCPKG_BINARY_SOURCES指定缓存到网络共享目录适合团队共用。并行编译执行set VCPKG_MAX_CONCURRENCY8Windows或修改 vcpkg 的 triplet 配置让多个库并行构建充分利用 CPU 多核。资产缓存镜像vcpkg 下载源码包时走的是各上游项目的下载链接网络不稳定时很容易失败。微软官方提供资产缓存镜像机制通过环境变量X_VCPKG_ASSET_SOURCES指定镜像地址把下载压力转移到镜像源上显著减少超时情况。具体配置方式可以参考微软官方文档中的 Asset Cache 说明这里不展开贴地址了因为不同网络环境差异很大。注意X_VCPKG_ASSET_SOURCES设置的是下载源映射不是代理。配置后 vcpkg 会优先从镜像取源码压缩包如果镜像没有再去原始地址下载。这个机制在 CI 环境里特别有用。6. 真实项目中的组合用法一套依赖怎么落地理论讲完了咱们用一个小项目把前面所有内容串起来。假设我现在要写一个 C 小工具需要解析 JSON 配置、打日志、格式化输出还要算一个快速幂。这是个很典型的场景如果不用 vcpkg光手动去搞三个库的依赖就得花一下午用了 vcpkg整个过程不超过五分钟。6.1 完整项目配置示例项目结构fast-pow-tool/ ├── CMakeLists.txt ├── vcpkg.json ├── main.cppvcpkg.json{ name: fast-pow-tool, version: 0.1.0, dependencies: [ fmt, spdlog, nlohmann-json ] }CMakeLists.txtcmake_minimum_required(VERSION 3.15) project(fast_pow_tool LANGUAGES CXX) find_package(fmt CONFIG REQUIRED) find_package(spdlog CONFIG REQUIRED) find_package(nlohmann_json CONFIG REQUIRED) add_executable(fast_pow_tool main.cpp) target_link_libraries(fast_pow_tool PRIVATE fmt::fmt spdlog::spdlog nlohmann_json::nlohmann_json) set_target_properties(fast_pow_tool PROPERTIES CXX_STANDARD 17)main.cpp#include fmt/format.h #include spdlog/spdlog.h #include nlohmann/json.hpp #include cstdint uint64_t fast_pow(uint64_t base, uint64_t exp, uint64_t mod) { uint64_t result 1; base % mod; while (exp 0) { if (exp 1) result (result * base) % mod; base (base * base) % mod; exp 1; } return result; } int main() { auto config nlohmann::json::parse(R({base: 2, exp: 10, mod: 1000})); uint64_t base config[base]; uint64_t exp config[exp]; uint64_t mod config[mod]; spdlog::info(calculating: {}^{} mod {}, base, exp, mod); fmt::print(result {}\n, fast_pow(base, exp, mod)); return 0; }构建命令cmake -B build -S . -DCMAKE_TOOLCHAIN_FILE$VCPKG_ROOT/scripts/buildsystems/vcpkg.cmake cmake --build build第一次执行时vcpkg 会去下载并编译 fmt、spdlog、nlohmann-json 三个库。nlohmann-json 是 header-only 库几乎是秒装spdlog 依赖 fmt所以两者会被同时构建。等编译完成后运行程序就会输出日志和计算结果。这个小例子看起来简单但它把前面所有知识点串起来了manifest 模式声明依赖、CMake 工具链集成、find_package 链接目标、以及真正用第三方库写出业务代码。你在自己项目里可以从这个骨架扩展把功能替换成实际需求就行。6.2 常见算法场景和库速查很多人在搜冒泡排序算法 C、二分查找 C、单调栈算法 C这类关键词。说实话这类基础算法自己写完全没问题也不需要引入第三方库。但如果你在准备面试或者做竞赛向项目vcpkg 里也有一些实用的算法和数据结构库Boost包含大量算法、容器、图论组件vcpkg install boostAbseilGoogle 的开源 C 库集合vcpkg install abseil-{fmt}现代格式化库fmt 本身就经常出现在算法输出优化中{fmt} spdlog 组合几乎成了现代 C 项目的标配日志方案另外如果你对游戏开发感兴趣热搜词里也有 C 游戏开发相关可以装这些轻量库开始练手SDL2、SFML、glfw、glm。一条命令装完直接开始写图形程序vcpkg install sdl2 sfml glfw glm这些库都能通过 find_package 集成到 CMake 项目里上手路径和上面例子完全一样。6.3 我的一些实际使用建议用 vcpkg 跑完不少项目之后我总结了几条直接影响体验的习惯第一永远保持 vcpkg 仓库更新但不要在项目开发中随意更新到最新。定期拉取一次git pull然后跑vcpkg upgrade看有哪些库可以升级但你项目里用的是 manifest 模式版本被 baseline 锁死升级只影响之后新配置的项目不会破坏现有项目。这是 manifest 模式最值钱的地方。第二不建议把 vcpkg 整个目录放进代码仓库。正确的做法是提交vcpkg.jsonCI 或新同事 clone 后先执行一次cmake -B build自动还原依赖。如果担心构建反复下载可以在 CI 环境里配置好二进制缓存一次编译全局复用。第三Windows 上如果同时装了多个版本的 VS比如 VS2019 和 VS2022vcpkg 默认按环境变量选编译器。如果你发现编译出来的库和当前项目用的编译器版本不匹配导致链接问题检查一下VCToolsVersion和VisualStudioVersion环境变量确保一路畅通。第四遇到奇怪的报错时先删掉build目录重新配置一次再删掉vcpkg的buildtrees目录重建一次最后再考虑是不是环境变量的问题。这两个删了重来的简单操作能解决大概一半的疑难杂症。说说我自己的心态变化。最早用 vcpkg 时我嫌它编译太慢装个库动辄十几分钟后来才知道是没配缓存、没配镜像、还把 triplet 搞混了纯粹是环境问题。配置好之后我从讨厌 vcpkg变成了每开一个新项目先建 vcpkg.json。慢的问题可以通过二进制缓存解决版本的问题可以通过 manifest 锁定解决集成的问题可以通过工具链文件解决。工具本身没有银弹但 vcpkg 算是在解决 C 依赖管理该死难用这件事上走出了很实在的一步。如果你现在还在手动给项目下载、解压、配路径我建议你花一个下午把 vcpkg 跑起来。第一次确实会踩几个坑但等你把坑都填平了之后的每一个 C 项目都会顺畅很多。到时候你再回头看那些在搜索引擎里反复搜索vscode 配置 c/c 环境、microsoft visual c 14.0 or greater is required的新手大概就能理解我写这篇文章的心情了。