Visual Studio 使用第三方库管理工具 vcpkg

一、介绍        

        Windows下开发C/C++程序,少不了用开源的第三方库。比如线性代数和矩阵分析的库eigen,或者图像处理的OpenCV库。虽然这些库都是开源的,但是由于要编译debug和release版本的,32位以及64位的,如果像FFmpeg这种还要考虑是否引用其他开源库的功能,那么编译类型的组合会更多。如此多库的版本,编译和管理起来都十分麻烦。

        这时候我们就需要一个库管理工具,来管理我们所有的第三方库了。这里使用vcpkg集成到Visual Studio中。使用vcpkg的优点有:

  • 自动下载开源库源代码
  • 源码包的缓存管理和版本管理,可以升级版本
  • 依赖关系检查(比如编译libcurl,会自动下载zlib、openssl进行编译)
  • 无缝集成Visual Studio,不需要设置库文件、头文件的所在目录,自动集成。
  • Visual Studio全平台支持,不仅支持Debug/Release、x86/x64编译,还支持UWP、ARM平台的编译。


二、vcpkg安装

1.下载源码

        vcpkg的源码地址,可以直接下载zip包或者git clone下来:GitHub - microsoft/vcpkg: C++ Library Manager for Windows, Linux, and MacOSC++ Library Manager for Windows, Linux, and MacOS. Contribute to microsoft/vcpkg development by creating an account on GitHub.icon-default.png?t=N7T8https://github.com/Microsoft/vcpkg

2.编译vcpkg

        使用源码里的bat批处理文件即可编译,在PowerShell中进入到源码路径执行.\bootstrap-vcpkg.bat

         Vcpkg大量使用的psl脚本,所以官方强烈推荐使用PowerShell而不时CMD命令行来执行各种操作。尽管在使用的时候兼容CMD,但是在编译这一步,请使用PowerShell。

        编译完成后会在源码路径下生成一个vcpkg.exe文件,可以输入.\vcpkg.exe --help查看帮助,检查是否安装成功。

3.添加环境变量

        在环境变量中添加vcpkg的路径:


三、使用vcpkg安装第三方库

1.查看Vcpkg支持的开源库列表

        进入到源码路径执行:

.\vcpkg.exe search

2.安装一个第三方库

        这里的“安装”其实是指下载和编译。

        比如要安装Windows的64位的OpenCV库,可以输入下面的命令安装:

.\vcpkg.exe install opencv:x64-windows

如果电脑中没有安装cmake,vcpkg会自动下载portable版本的cmake。但是由于各种原因,下载的网速很慢,所以建议先自行下载安装cmake。最好是下载最新版本的cmake。

3.指定编译某种架构的第三方库

        上面可以看到安装OpenCV的命令最后有:x64-windows,指定了安装的架构为Windows的64位库。

        如果不指定安装的架构,vcpkg默认把开源库编译成x86的Windows版本的库。可以使用下面的命令查看vcpkg支持安装多少种架构:

.\vcpkg.exe help triplet
  • arm-uwp
  • arm-windows
  • arm64-uwp
  • arm64-windows
  • x64-uwp
  • x64-windows-static
  • x64-windows
  • x86-uwp
  • x86-windows-static
  • x86-windows

        只需要在需要安装的第三方库后面使用冒号“:”指定相应的triplet,即可安装对应架构的第三方库。

4.移除一个指定的第三方库

        如果移除一个已经安装的开源库,那么执行remove指令即可。比如我们要移除OpenCV,那么执行命令:

.\vcpkg.exe remove opencv
  •  这个时候只是移除了默认的x86-winodws版本的文件,如果有其他平台的版本需要移除,需要指定相应的triplet。
  • 移除也只是移除了二进制程序库而已,源码包和解压缩的源码并没有删除。

5.列出已经安装的开源库

.\vcpkg.exe list


四、vcpkg和Visual Studio的集成

        在安装完我们需要用的第三方库后,常规情况下,需要设置include目录、lib目录等。vcpkg提供了两种方法,可以方便的在自己的项目中集成安装的第三方库。

1.集成到全局

        这种方法适用于 MSBuild 创建的项目,cmake 的项目也可以通过添加编译选项来引用下载的第三方库。执行命令:

 .\vcpkg integrate install

        当出现“Applied user-wide integration for this vcpkg root.”字样的时候,说明已经集成成功。根据输出也可以看到 cmake 项目使用的编译选项,以及在 MSBuild 项目中可以直接包含头文件引用。

        移除全局集成执行下面的命令即可:

 .\vcpkg integrate remove

 2.集成到工程

        在大多数情况下,我们并不希望将所有安装的库集成到全局环境中,毕竟有很多第三方库我们希望进行自定义处理,或者根本不想使用这些第三方库。因此,将这些库集成到具体的工程中是最灵活的处理方式,也是工程级项目推荐的做法。

(1)生成配置文件

        首先执行如下命令,生成 nuget 配置文件:

 .\vcpkg integrate project

        根据输出可以看到在 vcpkg 的路径下生成了一个 .nupkg 的文件:

(2)基本配置

        接着,打开 vs2022 工具 -> NuGet包管理器 -> 程序包管理器设置 -> 程序包源

        添加安装的vcpkg包源,点击“加号”增加一个源。修改源的名字为vcpkg。在“源”的选项中点击右侧的"…"选择上一步中 .nupkg 文件的路径,然后点击右侧的“更新按钮”。点击“确定”,关闭设置对话框。

(3)工程配置

        用Visual Studio 打开一个工程或解决方案。右键点击需要设置的工程或解决方案,选择“管理NuGet程序包”。在右上角的“程序包源”中选择刚刚设置的“vcpkg”。这样在“浏览”选项卡中就可以看到第一步中生成的 nuget 配置文件。点击最右侧的“安装”,这样就可以集成到某个工程了。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/710238.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

跨境电商测评、采购大额下单自养号需要解决哪些技术原理?

市场上有许多伪装工具,但大多数只是为了方便开发人员测试系统程序,它们并不能针对特定的电商平台进行伪装。每个电商平台都有其独特的风控机制,因此,我们需要从硬件环境的底层配合软件控制,以满足各平台的检测规则。 …

【测试】软件测试方案—实际项目直接套用(Word原件)

1. 引言 1.1. 编写目的 1.2. 项目背景 1.3. 读者对象 1.4. 参考资料 1.5. 术语与缩略语 2. 测试策略 2.1. 测试完成标准 2.2. 测试类型 2.2.1. 功能测试 2.2.2. 性能测试 2.2.3. 安全性与访问控制测试 2.3. 测试工具 3. 测试技术 4. 测试资源 4.1. 人员安排 4.2. 测试环境 4.2.…

Java 网站开发入门指南:如何用java写一个网站

Java 网站开发入门指南:如何用java写一个网站 Java 作为一门强大的编程语言,在网站开发领域也占据着重要地位。虽然现在 Python、JavaScript 等语言在网站开发中越来越流行,但 Java 凭借其稳定性、可扩展性和丰富的生态系统,仍然…

Aigtek电压放大器的标准参数是什么

电压放大器是电子电路中常用的一种器件,主要用于放大输入电压信号。为了评价和比较不同的电压放大器,有一些标准参数被广泛应用。下面将详细介绍电压放大器的几个常见标准参数。 首先是增益。增益是衡量电压放大器输出信号与输入信号之间的倍数关系&…

【乐吾乐2D可视化组态编辑器】开关、阀门、报警状态切换

开关状态 开关的断开与闭合:将电力组件的“开”与“关”2个组件重叠在一起,右键选择“组合为状态”,属性面板中就可以任意切换状态。 视频教程:开关阀门多状态控制 乐吾乐2D可视化组态编辑器地址:https://2d.le5le.co…

30KW高原汽油发电机,海拔5000米可使用

大汉动力高原汽油发电机是专为高原地区设计的发电设备,其设计和特性考虑了高原环境的特别性。以下是关于高原汽油发电机的一些关键信息: 设计特点: 高原适应性:高原地区海拔高,空气稀薄,氧气含量低&#x…

高考志愿填报选专业,兴趣爱好和就业前景哪个优先?

每个人都有自己的兴趣与爱好,而高考志愿填报是在为自己选择职业方向。最理想的状态就是把自己的兴趣和爱好与自己的职业统一起来,让兴趣和爱好促进职业的发展,为职业增添动力。但现实生活中,这种理想的状态并不是每个人都能达到的…

前端技术回顾系列 11|TS 中一些实用概念

在微信中阅读,关注公众号:CodeFit。 创作不易,如果你觉得这篇文章对您有帮助,请不要忘了 点赞、分享 和 关注 我的公众号:CodeFit,为我的持续创作提供动力。 上文回顾:泛型在类和接口中的应用 上一篇文章我们回顾了 泛型 在 类 和 接口 中的应用。 通过使用泛型,我们…

工资信息管理系统的设计

管理员账户功能包括:系统首页,个人中心,基础数据管理,公告管理,津贴管理,管理员管理,绩效管理 用户账户功能包括:系统首页,个人中心,公告管理,津…

Python酷库之旅-比翼双飞情侣库(08)

目录 一、xlrd库的由来 二、xlrd库优缺点 1、优点 1-1、支持多种Excel文件格式 1-2、高效性 1-3、开源性 1-4、简单易用 1-5、良好的兼容性 2、缺点 2-1、对.xlsx格式支持有限 2-2、功能相对单一 2-3、更新和维护频率低 2-4、依赖外部资源 三、xlrd库的版本说明 …

苹果AI入华探讨及Apple Intelligence体验分析

引言 近日,苹果在WWDC 2024上引起了广泛关注。尽管苹果在发布会上并未明确提到“AI”一词,但从其展示的众多新功能中可以看出,AI已深深嵌入到其产品中。那么,苹果AI何时能在中国落地?它的模型大小是多少?用…

精品丨PowerBI迁移到SSAS

业务场景: 企业初期在进行 BI 可视化路线的时候,往往不会选择方案较为完整的SSAS,而是会选择轻量的 PowerBI 方案,究其根本还是软件成本的问题。 但是随着模型越来越臃肿,维护成本越来越高,有很多模型需要进…

leetcode LRU 缓存

leetcode: LRU 缓存 LRU 全称为 Least Recently Used,最近最少使用,常常用于缓存机制,比如 cpu 的 cache 缓存,使用了 LRU 算法。LRU 用于缓存机制时,关键的是当缓存满的时候有新数据需要加载到缓存的,这个…

9.1 图片的分割处理(c++)

本文的图片处理分为图片分割、图像的亚像素坐标处理。亚像素处理的原理可以看论文一种基于多项式插值改进的亚像素细分算法,该论文的详解及c的代码实现可以看博文基于多项式插值的亚像素边缘定位算法_基于多项式插值的亚像素算法-CSDN博客。下面的内容很多来自以上博…

简单Mesh多线程合并,使用什么库性能更高

1)简单Mesh多线程合并,使用什么库性能更高 2)Unity Semaphore.WaitForSignal耗时高 3)VS编辑的C#代码注释的中文部分乱码 4)变量IntPtr m_cachePtr切换线程后变空 这是第389篇UWA技术知识分享的推送,精选了…

Stability AI最新的SD3模型存在严重问题 为规避裸体结果导致躯体部分错乱

人工智能 Stability AI 最新的 SD3 Medium 模型存在严重问题,只要生成人物就会出现躯体错乱,这似乎是该公司刻意规避生成裸体图片的结果。目前猜测他们可能在训练过程中就剔除了 NSFW 内容,同时在训练时规避裸体内容进而导致模型也会刻意将人…

03 Tricks

一:Auto-ML的一般形式 还可以支持这个CV啦lp啦,还有多模态啦,都还有很多很多任务啊,都可以支持啊 Auto-Sklearn Auto-Pytorch 结构搜所:神经网络搜所算法: AutoGluon 02 >自动特征工程 Tsfresh Boru…

ATF是如何完成双系统切换的?

ATF(Arm Trusted Firmware)是一个用于ARM架构处理器的可信固件,它最初提供的最主要的功能就是:双系统切换和电源管理。 那么如何进行双系统切换呢,在双系统切换的示例中,除了CPU的跳转,例如CPU…

用Rust手把手编写一个Proxy(代理), 开始动工

https://shop.kongfz.com/795263/ 代理端和代理服务端之间可用自有格式来实现多路复用以减少连接的建立断开的开销,目前暂未实现代理服务端。 类结构 proxy.rs 负责代理结构的存储,监听类型,监听地址,是否有父级地址,认证账号密码等。 flag.rs 监听类型的二进制结构,…

2024 年最新 Python 基于百度智能云实现短语音识别、语音合成详细教程

百度智能云语音识别 采用国际领先的流式端到端语音语言一体化建模算法,将语音快速准确识别为文字,支持手机应用语音交互、语音内容分析、机器人对话等场景。百度短语音识别可以将 60 秒以下的音频识别为文字。适用于语音对话、语音控制、语音输入等场景…