最近在折腾GTFO的外挂,在翻github的时候遇到了要安装vcpkg包管理工具,突发好奇,想要整明白
标准解释:
C++ 没有统一的包管理机制,而许多第三方库(比如 Boost、OpenCV、fmt、spdlog)安装步骤繁琐(编译配置复杂)、库依赖复杂(A依赖B,B又依赖C)、不同平台路径和构建方式不同(Windows / Linux / macOS)。vcpkg 是一个由 Microsoft 开发的 C++ 包管理工具,主要用于: 安装、管理、和集成 C++ 的第三方库。
个人笔记:
Q1:我使用Everything对整个电脑搜索发现了多个vcpkg文件夹,为什么会这样,它们都是什么?
①C:\Program Files\Microsoft Visual Studio\2022\Community\VC\vcpkg
②C:\Users\Thorns\AppData\Local\vcpkg
③D:\Library\vcpkg
路径 | 类型 | 作用 |
---|---|---|
① | Visual Studio 附带的内置版本 | VS 自动用 |
② | 全局配置路径(不是实际安装) | 用来“指向”你手动安装的 vcpkg |
③ | 真正的 vcpkg 安装路径 | 你控制的主要版本 |
Q2:我项目使用的依赖包下载到那里了、项目文件中多的vcpkg_installed是什么?
这是为了让每个项目的依赖是独立的、可重复的、可版本控制的。在项目目录里看到一个 vcpkg_installed 文件夹,说明你(或你用的构建工具)正在使用一种 “本地安装模式”(或叫 manifest mode)的 vcpkg。这是 vcpkg 的一个非常实用的新特性。这个文件夹是 vcpkg 为你的项目局部生成的库依赖缓存目录,里面存放了你项目使用的库的二进制文件(.lib、.dll)和头文件。它是由 vcpkg 的 清单模式(manifest mode)自动生成的,通常项目中会有vcpkg.json这个文件,用来表示需要的依赖。
Q3:个人的想法
有点像python的pip,有很多别人写好的第三方库,直接可以拿来调用,很方便节省开发时间,可以少写很多重复功能的代码。
Q4:针对Q1中2号文件夹中的各个文件是干什么的,chatgpt给出的分析。
当你安装vcpkg后,在vs的pws中输入vcpkg integrate install后,vcpkg 与 Visual Studio将进行全局集成,让你在 Visual Studio 中无需手动配置包含目录、库目录、链接库等信息,就能使用 vcpkg 安装的库。执行后,vcpkg 会做以下几件事:
1. ✅ 在 C:\Users\<你的用户名>\AppData\Local\vcpkg\
中创建配置文件:
vcpkg.user.props
(MSBuild 用于自动导入 vcpkg 库的配置)vcpkg.user.targets
(在链接阶段使用)vcpkg.path.txt
(记录当前 vcpkg 的真实位置)
2. ✅ 修改 Visual Studio 的构建行为:
对你打开的所有 VS 项目(基于 MSBuild)自动生效,无需在项目里手动设置 Include
和 Lib
路径。
只要:
- 项目是基于 MSBuild 的(
.vcxproj
) - 使用的 triplet(如
x64-windows
)与 vcpkg 安装库一致
vcpkg 安装的库就能“无缝集成”进来。
文件/目录 | 作用 |
---|---|
archives | 第三方库源码缓存 |
registries | vcpkg 包信息缓存 |
vcpkg.u ser.props | VS 自动配置头文件/库路径 |
vcpkg.user.targets | VS 编译后期的自动配置 |
config | 全局配置项(是否开启缓存、注册表等) |