如何将vcpkg集成到vs并有效配置(保姆级(大概))
如何将vcpkg集成到vs并有效配置(保姆级(大概))
在Visual Studio中选择使用NuGet还是vcpkg作为包管理器,主要取决于项目类型、开发需求和语言环境。本文将详细介绍如何将vcpkg集成到Visual Studio中,并探讨vcpkg和NuGet的关系及使用方法。
一、概念
在Visual Studio中选择使用NuGet还是vcpkg作为包管理器,主要取决于项目类型、开发需求和语言环境。
NuGet:
主要面向C#/.NET项目,管理.NET程序集(如类库、工具包等)。
与Visual Studio深度集成,提供图形化界面,适合快速安装和更新.NET生态中的包。
vcpkg:
专为C/C++项目设计,支持跨平台(Windows、Linux、macOS)。
自动处理C++第三方库的编译、依赖关系和版本管理,尤其适合需要复杂依赖链的开源库(如OpenCV、Boost)。
结论:
- C#/.NET项目优先选择NuGet;C++项目推荐vcpkg配置。
二、配置vcpkg
1. 安装vcpkg
新建一个文件夹,注意该文件夹不能再中文路径内,然后点击该文件夹右键使用Git Here输入指令克隆vcpkg仓库:
git clone https://github.com/microsoft/vcpkg
进入vcpkg目录,运行:
cd vcpkg
bootstrap-vcpkg.bat
然后关闭Git界面,可以输入exit指令退出,复制vcpkg的文件夹路径,然后在电脑的系统环境变量中添加该路径,具体操作为:桌面右键此电脑->选择属性->选择高级电脑设置->选择界面下方系统环境变量的path路径->双击进去后新建项目并添加路径。
完成后再次Git Here打开文件夹,输入vcpkg help
,显示有一长串指令代表成功添加了vcpkg到环境变量中。
2. 将vcpkg全局集成到VS中
输入以下命令,成功后,VS会自动识别vcpkg安装的库路径,无需手动配置头文件、库文件等:
vcpkg integrate install
3. 在VS中添加程序包源
打开VS,然后在项目目录中打开管理NuGet程序包。
点击+号新建程序包源,将名称改为vcpkg,源改为自己文件夹下的script\buildsystems
路径,点击更新,完成。
注意:在我观察发现,最新的vcpkg的nupkg包是在vcpkg根目录下,所以,如果在上面的路径中找不到vcpkg文件,就把路径改为vcpkg的跟路径,例如将上面的改为E:\vcpkg。
三、vcpkg的两种集成方式
在vcpkg中,vcpkg integrate install
和vcpkg integrate project
是两种不同的集成方式,分别服务于全局和项目级的依赖管理。
1. vcpkg integrate install(全局集成)
功能与特点
- 作用范围:将vcpkg安装的库路径(如头文件、库文件)全局集成到Visual Studio,所有新建或现有的C++项目均可直接引用这些库,无需手动配置路径。
- 配置方式:运行命令后,vcpkg会将
installed\<triplet>\include
和installed\<triplet>\lib
等路径自动添加到Visual Studio的系统级包含目录和库目录中。安装新库后,无需重启VS即可直接使用(部分情况需重新生成项目)。 - 适用场景:需要跨多个项目共享同一套依赖库的开发者;简化依赖管理,避免重复配置路径。
# 全局集成
.\vcpkg integrate install
# 移除全局集成
.\vcpkg integrate remove
2. vcpkg integrate project(项目级集成)——建议
功能与特点
- 作用范围:为当前项目生成一个NuGet包,通过NuGet管理器将vcpkg的库依赖绑定到特定项目中。
- 配置方式:运行命令后,会在
vcpkg/scripts/buildsystems
目录下生成.nupkg
文件。开发者需手动在Visual Studio中添加该NuGet包源,并通过NuGet管理器安装到项目中。 - 适用场景:需要精确控制依赖版本或隔离不同项目的依赖环境(如团队协作时确保依赖一致性);项目需独立部署或分享,避免依赖全局配置。
# 生成NuGet包
vcpkg integrate project
# 在VS中:工具 → NuGet包管理器 → 程序包源 → 添加本地源路径E:\vcpkg\scripts\buildsystems)
# 然后通过NuGet管理器安装生成的包
2.1 配置包源
输入上面代码后查看Git窗口,复制下面的install一行指令。然后打开VS按如下图片方法打开包管理控制台:以后vcpkg指令都可在该控制台写。在控制台输入复制的指令,就配置好了项目包源。
2.2 配置附加包含目录
在VS界面,点击项目选项,选择属性,然后按如下图片找到附加包含目录:点击下拉箭头,选择编辑,点击文件夹图片选择vcpkg文件夹下的install\u0064-windows\include
路径,不能选择下一级路径,点击确定,配置完成。
四、概念再理解
我在探究vcpkg和nuget的关系中有如下疑问:“nuget文件是管理我使用vcpkg指令安装的库吗?”。对此deepseek给出的解答是:
NuGet文件本身并不直接管理通过vcpkg安装的库,但可以通过vcpkg将已安装的库导出为NuGet包(.nupkg
文件),从而利用NuGet的依赖管理功能来管理这些库。以下是详细说明:
1. vcpkg和NuGet的关系
- vcpkg:是一个C++包管理器,用于安装、编译和管理C++第三方库(如OpenCV、Boost)。它通过命令行工具(如
vcpkg install
)直接管理库的安装和依赖。 - NuGet:是一个通用的包管理器,主要用于.NET项目,但也支持C++项目。它通过
.nupkg
文件分发和管理依赖库。
vcpkg和NuGet可以结合使用,具体方式是通过vcpkg将已安装的库导出为NuGet包,然后在Visual Studio中通过NuGet管理器引用这些包。
如何使用NuGet管理vcpkg安装的库
步骤 1:通过vcpkg安装库
使用vcpkg安装所需的库,例如:
vcpkg install fmt:x64-windows
步骤 2:将库导出为NuGet包
使用vcpkg export
命令将已安装的库导出为NuGet包:
vcpkg export fmt --nuget --output "E:\vcpkg_packages"
此命令会在vcpkg根目录下生成一个.nupkg
文件(如vcpkg_packages.1.0.0.nupkg
)。然后就是重复我上面写的在VS中添加程序包源的方法,成功了如下图:
五、调试
新建空文件.cpp,复制以下代码并运行:
#include <fmt/core.h>
int main() {
fmt::print("Hello, NuGet!\n");
return 0;
}
成功了则显示以下输出。
六、小结
常用的vcpkg命令
参考资料:VS集成vcpkg_vcpkg设置vs-CSDN博客
命令 | 功能 |
---|---|
vcpkg install | 安装库 |
vcpkg remove | 卸载库 |
vcpkg update | 更新所有库 |
vcpkg list | 列出已安装的库 |
vcpkg search | 搜索库 |
vcpkg integrate install | 将 vcpkg 集成到 vs中 |
VS上的vcpkg的设置
该设置在VS界面项目选项->属性->配置属性->vcpkg
类别 | 设置项 | 描述 |
---|---|---|
General(常规设置) | Use Vcpkg | 是否使用 vcpkg 管理依赖,启用后才能使用 vcpkg 安装的库 |
Use Vcpkg Manifest | 必须将此属性设置为true才能从本地vcpkg.json文件使用。如果设置为false,则会忽略任何本地vcpkg.json文件。 | |
Install Vcpkg Dependencies | 此属性目前默认为false,不过未来将会默认为true。是否自动安装依赖,构建时自动安装 vcpkg.json 中列出的库 | |
Use AutoLink | 自动链接库文件,不需要手动在项目设置中添加库 | |
App-locally deploy DLLs | 将 DLL 复制到应用程序目录,便于程序部署 | |
Use built-in app-local deployment | 使用内置的本地部署,管理 DLL 的复制和部署 | |
Installed Directory | vcpkg 安装库的目录,指定库文件的位置 | |
Target and Configuration Specific(目标和配置特定) | Use Static Libraries | 使用静态库而不是动态库,程序体积更大但部署更简单 |
Use Dynamic CRT | 使用动态运行时库,影响 /MD 和 /MT 的选择 | |
Triplet | 指定目标平台(如 x64-windows),决定编译的目标架构 | |
Host Triplet | 主机平台设置,用于交叉编译场景 | |
Vcpkg Configuration(Vcpkg 配置选项) | Vcpkg Configuration | 如果配置名称过于复杂,vcpkg 无法正确猜出来,则可以将此属性明确分配给Release或Debug,从而明确告诉 vcpkg 你想要使用哪些库的变体 |
注意,在勾选了Use Vcpkg Manifest 是的情况下,必须要有vcpkg.json
文件才能成功编译,示例格式如下:
{
"name": "testport",
"version": "0.0.1",
"dependencies": ["vcpkg-cmake"]
}
相应的还有CMake配置,我这篇文章没有涉及这些配置的使用方法,想了解请参考其它文章,示例代码:
cmake_minimum_required(VERSION 3.10)
project(TestFmt)
find_package(fmt REQUIRED)
add_executable(test_fmt main.cpp)
target_link_libraries(test_fmt PRIVATE fmt::fmt)
七、总结
该文章是我探索了一天后翻找了许多博客资料,研究出来的文章,如有错误,请指出。