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,一经查实,立即删除!

相关文章

基于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文档解读 目录 题目链接​编辑我的写法 专业点评 时间复杂度分析 空间复杂度分析 总结 我要更强…

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

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

碳化硅陶瓷膜良好的性能

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

从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…

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;高速公路智能管理系统应运而生。本文将深入探讨高速公路智能管理系统的…

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;因此&…

Cask ‘oraclexxx‘ is unavailable: No Cask with this name exists.

brew search oracle-jdk或brew search --cask oracle-jdk 原因&#xff1a;Homebrew官方仓库不再维护多个旧版本的OracleJDK 不推荐使用Homebrew环境安装JDK //指定版本安装 brew install --cask temurin17 //设置 JAVA_HOME 环境变量 //找到安装的JDK 版本的路径 /usr/lib…

探索测试分享

1. “器” 项目中的实践——我们是怎么做的 本章将带你身历其境的感受到思想和方法是如何具体使用在项目里的 1.如何挖掘探索性测试的探索点&#xff0c;在任何阶段都可以利用探索测试策略找到可探索的点&#xff0c;发现产品中的bug&#xff0c;或明显或隐含。 “器”的应用…

利用74HC165实现8路并行输入口的扩展

代码&#xff1a; #include <mega16.h>// Declare your global variables here #define hc165_clk PORTB.0 #define hc165_lp PORTB.1 #define hc165_out PINB.2unsigned char read_hc165(void) {unsigned char data0,i,temp0x80;hc165_lp0;hc165_lp1; for(i0;i<7;i)…

汇编:内联汇编和混合编程

C/C内联汇编 C/C 内联汇编&#xff08;Inline Assembly&#xff09;是一种在C或C代码中嵌入汇编语言指令的方法&#xff0c;以便在不离开C/C环境的情况下利用汇编语言的优势进行性能优化或执行特定的硬件操作。以下是一些详细的说明和示例&#xff0c;展示如何在C和C代码中使用…

zookeeper介绍 和 编译踩坑

zookeeper 分布式协调服务 ZooKeeper原理及介绍 - 鹿泉 - 博客园 Zookeeper是在分布式环境中应用非常广泛&#xff0c;它的优秀功能很多&#xff0c;比如分布式环境中全局命名服务&#xff0c;服务注册中心&#xff0c;全局分布式锁等等。 本项目使用其分布式服务配置中心&am…

Minecraft模组开发(fabric)之准备工作

Minecraft模组开发&#xff08;fabric&#xff09;之准备工作 最近心血来潮想开发个Minecraft的模组&#xff0c;一边学习一边开发&#xff0c;顺带着将一些步骤、学习心得整理下来。之所以选择fabric&#xff0c;是因为自己的光影包使用的是iris-fabric&#xff0c;所以就想着…