如何将vcpkg集成到vs并有效配置(保姆级(大概))

一:概念

首先,我们应该知道一些概念:在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目录,运行bootstrap-vcpkg.bat

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\\include 和 installed\\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 管理器安装生成的包:cite[4]:cite[8]

2.1:配置包源

输入上面代码后查看GIt窗口,复制下面的install一行指令

然后打开vs按如下图片方法打开包管理控制台:以后vcpkg指令都可在该控制台写

在控制台输入复制的指令,就配置好了项目包源

2.2:配置附加包含目录

在vs界面,点击项目选项,选择属性,然后按如下图片找到附加包含目录:

点击下拉箭头,选择编辑,点击文件夹图片选择vcpkg文件夹下的install\x64-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 管理器引用这些包。

1:如何使用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

int main() {

fmt::print("Hello, NuGet!\n");

return 0;

}

成功了则显示以下输出

六:小结

1:常用的vcpkg命令

参考资料:VS集成vcpkg_vcpkg设置vs-CSDN博客

命令功能vcpkg install 安装库vcpkg remove 卸载库vcpkg update更新所有库vcpkg list列出已安装的库vcpkg search 搜索库vcpkg integrate install将 vcpkg 集成到 vs中

2: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 Directoryvcpkg 安装库的目录,指定库文件的位置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)

七:总结

该文章是我探索了一天后翻找了许多博客资料,研究出来的文章,如有错误,请指出