问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

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

创作时间:
作者:
@小白创作中心

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

引用
CSDN
1.
https://blog.csdn.net/weixin_73959052/article/details/145927000

在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 installvcpkg integrate project是两种不同的集成方式,分别服务于全局和项目级的依赖管理。

1. vcpkg integrate install(全局集成)

功能与特点

  • 作用范围:将vcpkg安装的库路径(如头文件、库文件)全局集成到Visual Studio,所有新建或现有的C++项目均可直接引用这些库,无需手动配置路径。
  • 配置方式:运行命令后,vcpkg会将installed\<triplet>\includeinstalled\<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)

七、总结

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

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号