vs2019 + vcpkg (C++第三方包配置工具)

标签: c++  机器学习

一、vcpkg安装

VS想要使用一些第三方的库需要自己下载代码,编译,配置,解决代码依赖,整个过程非常麻烦。为了解决这个问题,尝试使用vcpkg来安装和管理这些第三方库。

vcpkg是命令行包管理工具,在使用第三方库的c或c++开发中可以简化相关的配置操作。使用vcpkg对于c或c++开发,令人烦恼的第三方包管理工作大大的减轻 。

安装vcpkg很简单,直接从 github仓库: vcpkg地址 下载一下代码,然后编译就行了。

Linux平台下,运行bootstrap-vcpkg.sh文件;
Windows平台下,下载完成之后运行bootstrap-vcpkg.bat 文件。
在这里插入图片描述
运行文件完成编译后,在当前目录下生成vcpkg.exe文件
在这里插入图片描述

二、vcpkg使用

在该目录下打开powershell或者是cmd窗口,通过命令行来使用vcpkg。

  1. 查看Vcpkg支持的开源库列表
    执行命令
.\vcpkg.exe search

结合findstr命令,可以看vcpkg是否可以安装我们想要的库。查找是否有opencv的命令如下

vcpkg.exe search | findstr opencv
  1. 安装一个开源库

这里的“安装”其实是指下载和编译,比如我们需要安装常用的jsoncpp库,那么执行命令

.\vcpkg.exe install jsoncpp
  1. Vcpkg和Visual Studio的集成

上面已经安装了一些第三方库,那如何使用呢?
常规情况下,我们需要设置include目录、lib目录等,会有很多工作量。Vcpkg提供了一套机制,可以全自动的适配目录,而开发者不需要关心已安装的库的目录在哪里,也不需要设置。这是Vcpkg的一大优势。

(1)集成到全局
“集成到全局”适用于Visual Studio开发环境和msbuild命令行。执行命令:

.\vcpkg.exe integrate install

当出现“Applied user-wide integration for this vcpkg root.”字样的时候,说明已经集成成功。这时候可以在任意的工程中使用安装好的第三方库。

(2)移除全局集成

移除全局集成只要执行下列命令即可:

.\vcpkg.exe integrate remove

(3)集成到工程

上面已经可以集成到全局,为什么还要“集成到工程”呢?因为在大部分情况下,我们不希望集成到全局,毕竟有很多第三方库我们希望自定义处理一下,或者干脆不想集成第三方库。那么集成到工程是最灵活的处理方式。也是工程级项目推荐的处理方式。“集成到工程”是整个vcpkg中最复杂的一项,它需要利用Visual Studio 中的nuget插件来实现。我们接下来一步一步来说。

第一步:生成配置

.\vcpkg integrate project

这时候会在“vcpkg_root\scripts\buildsystems”目录下,生成nuget配置文件.

第二步:基本配置
打开Visual Studio,点击菜单“工具->NuGet包管理器->程序包管理器设置”,进入设置界面,点击“程序包源”。
在这里插入图片描述点击“加号”增加一个源。修改源的名字为vcpkg。在“源”的选项中点击右侧的”…”选择vcpkg目录下的“scripts\buildsystems”目录,然后点击右侧的“更新按钮”。

点击“确定”,关闭设置对话框。

到此,全局性的设置已经完成,以后不必再重复设置了。

第三步:工程配置

用Visual Studio 打开一个工程或解决方案。右键点击需要设置的工程,选择“管理NuGet程序包”。在右上角的“程序包源”中选择刚刚设置的“vcpkg”。这样在“浏览”选项卡中就可以看到“vcpkg.H.Repos.vcpkg”。点击最右侧的“安装”。这样就可以集成到某个工程了。
在这里插入图片描述

三、例子

所有的通过vcpkg install的第三方库,都是全局的。所有vc ide 实例共享。

然后,如果想安装三方库,直接使用:

PS> .\vcpkg install ffmpeg

然后vcpkg就自动配置,下载,编译库文件。等他编译完毕后,都设置到了全局的vs ide中,你要做的就是直接#include 库的头文件就行了。再也不需要神马库依赖神马的麻烦事了。

版权声明:本文为omg_orange原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/omg_orange/article/details/107590782

智能推荐

grbl脱机控制器

grbl脱机控制器 1年前因为研究自动写字机,所以渐渐萌生出做一台cnc控制器的想法,因为原来自己也研究过自动化控制,所以对于步进电机的控制还算熟悉,但由于精力的原因没有整出一个完整的控制框架,今年正好疫情严重导致自己也没啥事,所以花点时间做了一整套的东西。 然后还要说明的是,标题虽然是是grbl的脱机控制器,但实际和grbl一点关系都没有,做个标题党,吸引下点击率,这套控制系统从头到尾都是自己一...

leetcode24:两两交换链表中的节点(java实现)

    需求 给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。 你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。   示例: 给定 1->2->3->4, 你应该返回 2->1->4->3. 分析 奇数&偶数:链表整体长度为偶数时可以两两进行,奇数时最后一个数位置不变 具体实现:链表反转位置,并且其前...

pycharm+pyqt5+QtDesigner+pyUIC第一个pyqt5程序

安装pyqt5和pyqt5-tools 在tools中添加QtDesigner和PyUIC QtDesigner在"./Lib/site-packages/pyqt5_tools/Qt/bin"下,具体视python安装目录而定。PyUIC目录为"./Scripts/pyuic5.exe"。 在pycharm中,File->Settings->T...

如何编写智能合约(Smart Contract)?(III)建立标准代币部落币「BLC」

在上一篇中,我们我们如何编写智能合约?(II) 建立简易的加密代币,但是它存在很多安全问题,在本章中,我们将一步步带领大家创建一个能够放到以太币钱包的加密代币。 创建项目 有别于之前使用truffle init指令来初始化项目,在Truffle推出Boxes功能之后,我们可以直接套用称作react-box的样板,此样板已经整合create-react-app,可以直接用它来开发react web,...

Ionic3 自定义组件实现图片懒加载效果

在使用ionic3的过程中,我们可以使用angularjs的组件特性进行组件的自定义开发,对一些特定条件下的需求开发对应的组件。 下面我们就通过自定义组件来实现图片的懒加载效果。当我们需要加载的图片很大,但是我们又不愿意做压缩让图片失真,所以我们需要使用图片的懒加载效果。 实现流程 首先新建一个img-lazy-load组件: 会在src目录下生成一个components文件夹,里面包含img-l...

猜你喜欢

MFC中Combox控件相关操作

由于项目中需要从下拉菜单中选取某种型号,网上有好多的相关操作的代码,但是在博客中都没说相关代码放在哪个函数中,对于我这种小白试了有好久都没找到想要的结果,后来才发现是相应的初始化代码没有运行。如果要向控件中添加相关选项,例如下图所示: 应先将相应的代码添加到MFC的初始化函数中 如果出现如下现象: 要使下拉菜单中显示的顺序与代码添加的顺序相同,要将ComBox空间属性中Sort选项由True改为F...

基于MATLAB的RSSI测距定位技术性能仿真

基于MATLAB的RSSI测距定位技术性能仿真 一、仿真要求 二、仿真方案设计 三、仿真结果 四、仿真代码 一、仿真要求 要求一:RSSI的测量值由对数路径损耗模型产生,为减小波动造成的误差,其值可由多次测量取平均值来得到。 要求二:对数路径损耗模型中的参考距离路径损耗和路径损耗因子可通过参考点相互之间的测量值估计。 要求三:完成理想情况下(参考距离路径损耗和路径损耗因子已知)与实际情况下的RMS...

12-2 oauth2.0获取微博的access_token

        https://open.weibo.com/wiki/Oauth2/authorize       运行,得到一个地址 复制到浏览器访问 这个浏览器当前没有登录微博。   用我的2345浏览器访问,这个浏览器已经登录微博。   点击授权之后 注意 code https://open.weib...

kafka_消费者组消费进度监控实现

对于 Kafka 消费者,最重要的就是监控它们的消费进度,或者说监控它们消费的滞后程度(消费者 Lag 或 Consumer Lag)。 所谓滞后程度,就是指消费者当前落后于生产者的程度。Lag 的单位是消息数。我们一般是在主题这个级别上讨论 Lag 的,但实际上,Kafka 监控 Lag 的层级是在分区上的。如果要计算主题级别的,你需要手动汇总所有主题分区的 Lag,将它们累加起来,合并成最终的...