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 配置文件。点击最右侧的“安装”,这样就可以集成到某个工程了。

 

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2022年5月起RabbitMQ社区停止了对CentOS7的支持

前言 CentOS 7 的 RabbitMQ RPM 软件包将于 2022 年 5 月停止使用,因为 CentOS 发行系列提供了过时版本的 OpenSSL 和 Linux 内核。 建议 CentOS 7 用户迁移到使用较新发行版的新集群 从 2022 年 5 月 1 日起,RabbitMQ 将停止对 CentOS 7 的支持。展望…

基于springboot实现校园组团平台系统项目【项目源码】计算机毕业设计

基于springboot实现校园组团平台系统的设计演示 SSM框架介绍 本课题程序开发使用到的框架技术,英文名称缩写是SSM,在JavaWeb开发中使用的流行框架有SSH、SSM、SpringMVC等,作为一个课题程序采用SSH框架也可以,SSM框架也可以&…

FullCalendar日历组件集成实战(14)

背景 有一些应用系统或应用功能,如日程管理、任务管理需要使用到日历组件。虽然Element Plus也提供了日历组件,但功能比较简单,用来做数据展现勉强可用。但如果需要进行复杂的数据展示,以及互动操作如通过点击添加事件&#xff0…

每日一题——Python实现PAT乙级1028 人口普查 Keyboard(举一反三+思想解读+逐步优化)六千字好文

一个认为一切根源都是“自己不够强”的INTJ 个人主页:用哲学编程-CSDN博客专栏:每日一题——举一反三Python编程学习Python内置函数 Python-3.12.0文档解读 目录 题目链接​编辑我的写法 专业点评 时间复杂度分析 空间复杂度分析 总结 我要更强…

解析Java中1000个常用类:Process类,你学会了吗?

在Java编程中,Process类是一个非常有用的工具,它允许开发者从应用程序内部启动和管理本地操作系统进程。 本文将详细探讨Java中Process类的用法,包括它的基本概念、常见操作、实际应用场景以及一些高级技巧。 一、Process类的基本概念 1.1 什么是Process类 在Java中,Pr…

Python基础教程(十八):MySQL - mysql-connector 驱动

💝💝💝首先,欢迎各位来到我的博客,很高兴能够在这里和您见面!希望您在这里不仅可以有所收获,同时也能感受到一份轻松欢乐的氛围,祝你生活愉快! 💝&#x1f49…

碳化硅陶瓷膜良好的性能

碳化硅陶瓷膜是一种高性能的陶瓷材料,以其独特的物理和化学特性,在众多领域展现出了广泛的应用前景。以下是对碳化硅陶瓷膜的详细介绍: 一、基本特性 高强度与高温稳定性:碳化硅陶瓷膜是一种非晶态陶瓷材料,具有极高的…

ChatTTS

基于您的要求,我为您推荐一个开源项目——ChatTTS。 **项目名称:ChatTTS** ChatTTS是一个基于Python的自然语言处理项目,主要用于生成文本对话。该项目主要基于一种名为Text-to-Speech (TTS)的模型,可以模拟人类的语音对话。它提供…

从GAN到WGAN(02/2)

文章目录 一、说明二、GAN中的问题2.1 难以实现纳什均衡(Nash equilibrium)2.2 低维度支撑2.3 梯度消失2.4 模式坍缩2.5 缺乏适当的评估指标 三、改进的GAN训练四、瓦瑟斯坦(Wasserstein)WGAN4.1 什么是 Wasserstein 距离?4.2 为什么 Wassers…

mysql社区版可以用的聚类函数有哪些

MySQL社区版支持一系列聚类函数(或称为聚合函数),这些函数用于对一组值执行计算并返回单个值。以下是MySQL中常用的一些聚类函数,并附带简要描述和相关数字或信息(如适用): SUM() 功能&#x…

53.Python-web框架-Django开始第一个应用的多语言

针对上一篇的功能&#xff0c;本次仅对页面做了多语言&#xff0c;大家可以看看效果。 51.Python-web框架-Django开始第一个应用的增删改查-CSDN博客 目录 部门列表 新增部门 编辑部门 部门列表 源码 <!DOCTYPE html> {% load static %} {% load i18n %} <html …

JAVA开发 使用Apache PDFBox库生成PDF文件,绘制表格

1. 表格位置定点 2.执行效果展示&#xff08;截取PDF文件图片&#xff09; 3.执行代码 当我们使用Apache PDFBox库在PDF文件中创建带有表格的内容&#xff0c;需要遵循几个步骤。PDFBox本身并没有直接的API来创建表格&#xff0c;但我们可以通过定位文本、绘制线条和单元格矩形…

shell编程基础(第16篇:命令是什么?有哪些注意事项)

前言 前面我们已经使用过各种各样的命令&#xff0c;那么命令到底是什么呢&#xff1f;我们又该怎么理解该术语&#xff1f; 什么是命令&#xff1f; 命令是command的中文翻译&#xff0c;能在命令行中执行的是命令。因为早期的计算机只有文字界面&#xff0c;命令是程序&#…

高速公路智能管理系统:构建安全畅通的数字大动脉

随着城市化进程的加速和交通需求的增长&#xff0c;高速公路系统作为城市交通的重要组成部分&#xff0c;正承担着越来越多的交通运输任务。为了提升高速公路的安全性、便捷性和智能化管理水平&#xff0c;高速公路智能管理系统应运而生。本文将深入探讨高速公路智能管理系统的…

ExoPlayer 学习笔记

https://www.51cto.com/article/777840.html ExoPlayer支持多种媒体格式和流媒体协议的播放器 播放视频&#xff1a;player.play()暂停视频&#xff1a;player.pause()停止播放&#xff1a;player.stop() Media3 ExoPlayer | Android media | Android Developers implem…

双向链表详解及C++实现

一、引言 链表是一种常见的数据结构&#xff0c;它允许动态地分配内存空间&#xff0c;并通过指针&#xff08;或引用&#xff09;将数据元素连接在一起。双向链表作为链表的一种&#xff0c;除了拥有普通链表的特性外&#xff0c;每个节点还包含两个指针&#xff1a;一个指向…

Leetcode 剑指 Offer II 082.组合总和 II

题目难度: 中等 原题链接 今天继续更新 Leetcode 的剑指 Offer&#xff08;专项突击版&#xff09;系列, 大家在公众号 算法精选 里回复 剑指offer2 就能看到该系列当前连载的所有文章了, 记得关注哦~ 题目描述 给定一个可能有重复数字的整数数组 candidates 和一个目标数 tar…

能耗监控与管理平台

在当今社会&#xff0c;随着工业化、城市化的快速发展&#xff0c;能源消耗问题日益凸显&#xff0c;节能减排已成为全社会共同关注的焦点。在这个背景下&#xff0c;一款高效、智能的能耗监控与管理平台显得尤为重要。 一、HiWoo Cloud平台的概念 HiWoo Cloud是一款集数据采…

六大维度全面焕新升级!麒麟信安服务器操作系统V3.6.1引领未来计算

昨日&#xff0c;openEuler 24.03 LTS 正式发布&#xff0c;麒麟信安作为openEuler社区重要贡献者和参与者&#xff0c;充分发挥自身在国产操作系统领域的技术优势&#xff0c;在打造安全可靠、极致体验的操作系统上与社区共同努力&#xff0c;同步推出服务器操作系统V3.6.1&am…

OpenGL3.3_C++_Windows(7)

演示 最终演示效果 ​​​​ 冯氏光照 光照原理&#xff1a;对于向量相乘默认为点乘&#xff0c;如果*lightColor(1.0f, 1.0f, 1.0f);白光&#xff0c;值不变物体的颜色显示原理&#xff1a;不被物体吸收的光反射&#xff0c;也就是由白光分解后的一部分&#xff0c;因此&…