使用vcpkg

news2024/9/20 4:15:02

概述

vcpkg 是 Microsoft 和 C++ 社区维护的免费开放源代码 C/C++ 包管理器。 它于 2016 年推出,可帮助开发人员将项目迁移到较新版本的 Visual Studio。 vcpkg 已演变成 Windows、macOS 和 Linux 上开发人员使用的跨平台工具。 vcpkg 拥有大量开放源代码库注册表和企业就绪功能,旨在通过支持任何构建和项目系统来促进开发过程。 vcpkg 是核心的 C++ 工具,使用 CMake 中的脚本以 C++ 语言编写。 它从头开始设计,以解决 C/C++ 开发人员体验的独特难点。

官网地址:vcpkg - Open source C/C++ dependency manager from Microsoft

可以查看到支持哪些第三方库

Vcpkg 优势

相对于编译开源库的传统方法,使用 Vcpkg 的优点如下:

跨平台支持:Vcpkg 支持 Windows、Linux 和 macOS 等多个主流操作系统,使得开发者能够在不同的环境下进行一致的依赖管理。

自动解决依赖:Vcpkg 能够自动处理库之间的依赖关系,简化了依赖管理的复杂性,并且能够提供一致的库版本。

简单易用:Vcpkg 的命令行接口使得安装、更新和卸载库都变得简单快捷,节省了开发者的时间。

集成 Visual Studio:不需要设置库文件、头文件的所在目录,自动集成。

下载

源码下载地址:https://github.com/Microsoft/vcpkg

安装:

Windows系统

查看powershell版本

$PSVersionTable.PSVersion

5.1.19045.4648

powershell下载地址:Releases · PowerShell/PowerShell · GitHub 

这里我下载的是7.4.3-win-x64.msi

安装前提:联网

  1. 先更新powershell,因为vcpkg要求powershell比较高,现在powershell为7.4.3
  2. git clone https://github.com/microsoft/vcpkg.git  这里我下载的是2024.05.24版本
  3. 使用powershell 执行window系统执行vcpkg目录下的 bootstrap-vcpkg.bat 脚本来构建vcpkg工具,会生成vcpkg.exe

表示生成成功。

  1. 将vcpkg所在的目录路径添加到系统的环境变量中,以便能够在任何位置调用vcpkg.
  2. 查看安装是否成功  vcpkg version

延伸:

安装第三方库

安装32位(默认安装)

vcpkg install [package name]

安装64位

vcpkg install [package name]:x64-windows

集成到项目中

执行命令:vcpkg integrate install

执行后就可以让 VS 可以自动访问到[vcpkg-path]/installed下以安装的库,我们不需要另外去为项目配置库环境.

在此之后,您可以创建一个非 CMake 项目 (或打开已有的项目)。在您的项目中,所有已安装的库均可立即使用 #include 包含您需使用的库的头文件且无需额外配置。

为什么执行 vcpkg integrate install 命令后,在项目中更方便地使用vcpkg安装的库?

构建系统集成:vcpkg integrate install命令会自动检测项目所使用的构建系统,如CMake、Visual Studio等,并进行相应的集成配置。它会将vcpkg的工具链路径添加到构建系统的配置中,使得构建系统能够在库搜索路径中找到vcpkg安装的库。

自动设置链接和包含路径:在执行vcpkg integrate install命令后,vcpkg会自动将库的链接路径和头文件包含路径添加到项目的构建系统配置中。这样,在构建项目时,构建系统会自动查找并链接vcpkg安装的库,同时能够正确包含库的头文件。

透明集成:一旦使用vcpkg integrate install命令将vcpkg与项目集成,开发人员就可以无需关心库的链接和包含路径的配置细节。它们可以直接在项目中使用vcpkg安装的库,就像在使用系统库一样简单。

跨平台支持:vcpkg integrate install命令能够根据不同的构建系统和操作系统进行适配,确保在跨平台开发时能够正确地设置链接和包含路径。这使得在不同平台上使用vcpkg安装的库变得更加方便和一致。

Linux系统

前提是安装了git    git 安装命令 apt-get install git

  1. 按 Ctrl+Alt+t 打开命令终端,执行 cd ~ 切换到vcpkg安装目录
  2. 终端执行以下命令下载vcpkg源代码  git clone https://github.com/Microsoft/vcpkg.git ,这时下载的是main分支的。

也可以直接下载tags分支的版本(.zip文件),这样就不要用安装git了。

  1. 执行命令 ./bootstrap-vcpkg.sh来构建vcpkg  

执行完上述命令后会报如下错误,这说明缺乏构建工具和相关依赖项

我这是麒麟桌面系统

需要执行sudo apt-get install curl zip unzip tar

  1. 再次执行 ./bootstrap-vcpkg.sh 命令构建生成vcpkg

表示生成vcpkg,版本为20240710

  1. Linux上配置vcpkg的环境变量

可能出现的问题

1.error: RPC 失败。curl 92 HTTP/2 stream 0 was not closed cleanly: CANCEL (err 8)

error: 预期仍然需要 37991 个字节的正文

解决办法:git config --global http.version HTTP/1.1

常用的vcpkg命令以及详细解释

vcpkg version:显示vcpkg的版本信息。该命令会显示当前vcpkg工具的版本号和详细信息。

vcpkg search <package>:搜索库。该命令可用于在vcpkg的库集合中搜索特定的C++库。

vcpkg install <package>:安装库。使用该命令可以安装指定的C++库。例如,vcpkg install libevent将安装libevent库。

vcpkg remove <package>:移除库。使用该命令可以移除已安装的C++库。

vcpkg update:更新库。该命令会检查并更新vcpkg的库集合,使其与官方存储库保持同步。

vcpkg upgrade:升级库。使用该命令可以升级已安装的C++库到它们的最新版本。

vcpkg list:列出已安装的库。该命令会显示所有已安装的C++库及其版本信息。

vcpkg integrate install:集成vcpkg。该命令会将vcpkg工具链与项目的构建系统进行集成,以方便在项目中使用vcpkg安装的库。

vcpkg integrate remove:移除vcpkg与构建系统的集成。该命令会将vcpkg工具链从项目的构建系统中移除,以便项目不再依赖vcpkg安装的库。

vcpkg export <package>:导出一个第三方开源库。

vcpkg help:获取帮助。该命令会显示有关vcpkg命令和使用方法的帮助信息。

vcpkg help command:获取特定命令的帮助。使用该命令可以获取对特定命令的详细使用说明和示例。

vcpkg upgrade --no-dry-run:无提示升级库。使用该命令可以在不提示的情况下直接升级已安装的C++库到最新版本。

vcpkg search --x-versions:搜索所有可用的版本。该命令会显示库的所有可用版本,以帮助开发人员选择特定版本进行安装。

vcpkg upgrade --recurse:递归升级所有依赖。使用该命令可以递归地升级项目中已安装的所有库及其依赖项。

vcpkg create <library>:创建库。该命令可用于创建自定义C++库的vcpkg端口,并将其添加到vcpkg的库集合中。

vcpkg contact:联系vcpkg团队。使用该命令可以查看vcpkg团队的联系方式。

vcpkg integrate powershell:在PowerShell中集成vcpkg。该命令将vcpkg工具链与PowerShell的构建环境进行集成。

vcpkg owns <package>:确认库的归属。使用该命令可以查看哪些库是由vcpkg安装的,哪些是由其他方式安装的。

vcpkg edit <package>:编辑库的端口文件。该命令会在默认编辑器中打开指定库的端口文件,以便进行自定义配置。

vcpkg list --x-versions:列出所有可用版本。该命令会列出所有可用版本的库及其详细信息,以帮助开发人员选择特定版本进行安装。

vcpkg cache:显示库的缓存路径。使用该命令可以查看vcpkg缓存已下载的库二进制包的位置。

vcpkg config:管理vcpkg的配置。该命令允许开发人员配置和管理vcpkg的不同选项,如设置默认的安装路径、设置C++编译器等。

vcpkg binarycache:设置二进制包缓存路径。使用该命令可以修改vcpkg的二进制包缓存路径,以便在离线环境中使用已下载的二进制包进行安装。

常安装的第三方库

安装第三方库需要从git下载源码,如果git网速不行,可以直接从git下载.zip源码包,然后放在vcpkg的downloads目录。

可以通过https://vcpkg.io/en/index.html查看到支持哪些第三方库

查看是否存在对应的版本

官网地址:vcpkg - Open source C/C++ dependency manager from Microsoft

可以查看到支持哪些第三方库

也可以使用vcpkg search <package>

指定版本安装

(默认安装32位)

vcpkg install [package name]

如指定安装64位

vcpkg install [package name]:x64-windows

要编译安装静态库,只需加上 -static 即可

如:vcpkg install spdlog:x64-windows-static

查找支持的系统架构

vcpkg help triplet

查看编译好安装的第三方库

在packages目录下有该第三方库所有的依赖库,在installed目录下有完整的该第三库的数据。

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

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

相关文章

Linux-安装VMware-01

一、认识linux Linux 是一个开源的类 Unix 操作系统&#xff0c;由林纳斯托瓦兹&#xff08;Linus Torvalds&#xff09;于1991年首次发布。Linux 是许多计算机硬件的底层操作系统&#xff0c;特别是服务器、嵌入式系统和个人电脑。它支持多种架构&#xff0c;包括 x86、x64、A…

linux编译gcc源码详解

linux编译gcc源码详解 一、下载依赖包二、安装依赖2.1 安装m42.2 编译GMP2.3 编译MPFR2.4. 编译MPC2.5 设置环境变量三、gcc编译3.1 下载gcc3.2 编译gcc源码3.3 环境变量的配置一、下载依赖包 https://gcc.gnu.org/pub/gcc/infrastructure 命令下载依赖库,注意gcc编译时的依…

stm32cubeIDE与stm32cubeMX库文件安装路径自定义设置

1、 stm32cubeMX库文件安装路径自定义设置 打开stm32cubeMX软件&#xff0c;依次点击标题栏【Help】→【Updater Settings】 点击图中的【Browser】&#xff0c;选择自己想要存放库文件的文件夹&#xff0c;选择完成后点击【OK】即可设置成功。 PS&#xff1a;这里的路径建议…

python实现接缝雕刻算法

python实现接缝雕刻算法 接缝雕刻算法步骤详解Python实现详细解释优缺点应用领域接缝雕刻算法(Seam Carving Algorithm)是一种内容感知的图像缩放技术,可以智能地改变图像的尺寸,而不会明显影响其重要内容。它通过动态规划的方式寻找图像中的“接缝”,即在图像中从上到下或…

hadoop完全分布模式搭建

本次搭建是基于伪分布式进行的,所以配置之前需要搭建好伪分布式 我使用的ubuntu版本见下 虚拟机之前安装过在此不在记录 伪分布式的搭建过程在之前的第一次实验报告上有详细的记录 修改主机名

《Java初阶数据结构》----7.<优先级队列PriorityQueue>

前言 大家好&#xff0c;我目前在学习java。之前也学了一段时间&#xff0c;但是没有发布博客。时间过的真的很快。我会利用好这个暑假&#xff0c;来复习之前学过的内容&#xff0c;并整理好之前写过的博客进行发布。如果博客中有错误或者没有读懂的地方。热烈欢迎大家在评论区…

【算法】插入排序 与 希尔排序 概念+图解+代码【Python C C++】

1.插入排序 1.1概念 插入排序(InsertionSort)&#xff0c;一般也被称为直接插入排序。 对于少量元素的排序&#xff0c;它是一个有效的算法。插入排序是一种最简单的排序方法&#xff0c;它的基本思想是将一个元素插入到已经排好序的有序表中&#xff0c;从而构造出一个新的…

EXCEL自动公式计算始终为0

如果你的数据单元格的左上角存在绿色的三角小箭头&#xff0c;那么就会造成这种问题&#xff1a; 你的数字是以文本形式存入的单元格 解决办法&#xff1a; 选中数据列&#xff0c;数据->分列 直接选择完成 此时就可以进行公式计算了

用友U8 Cloud MeasureQueryFrameAction SQL注入漏洞复现

0x01 产品简介 用友U8 Cloud是用友推出的新一代云ERP,主要聚焦成长型、创新型企业,提供企业级云ERP整体解决方案。 0x02 漏洞概述 用友U8 Cloud MeasureQueryFrameAction接口处存在SQL注入漏洞,未经身份验证的远程攻击者除了可以利用 SQL 注入漏洞获取数据库中的信息(例…

Vue3逻辑复用及内置组件

Vue3的逻辑复用主要通过“组合式函数”、“自定义指令”及“插件”来实现。提高了代码复用性&#xff0c;增强代码可维护性及促进团队合作。 1 逻辑复用 1.1 组合式函数 利用Vue组合式API来封装和复用有状态逻辑的函数。对组合式函数有如下约定&#xff1a; 命名&#xff0…

高通Hexagon ENPU4 从ONNX模型转换成EAI浮点模型

&#x1f3c6;本文收录于《CSDN问答解惑-专业版》专栏&#xff0c;主要记录项目实战过程中的Bug之前因后果及提供真实有效的解决方案&#xff0c;希望能够助你一臂之力&#xff0c;帮你早日登顶实现财富自由&#x1f680;&#xff1b;同时&#xff0c;欢迎大家关注&&收…

【MARL】MADDPG + attention 实现(+论文解读)

文章目录 前言注意力机制论文里的attention回顾知识-MADDPG讲解1.Q的定义2.Q的恒等式3.论文里的attention4.好处 实现 和 修改结果展示原论文代码 翻改版修改后原maddpg代码 前言 导师让在MADDPG上加一个注意力机制&#xff0c;试了很多种&#xff0c;下面的参考的论文的效果最…

Maven的概念

1.什么是Maven 1.1.什么是Maven Maven是跨平台的项目管理工具&#xff0c;主要服务于基于Java平台的项目构建、依赖管理以及项目信息管理。 1.2.什么是理想的项目构建 高度自动化&#xff0c;标准化&#xff0c;跨平台&#xff0c;可重用的组件 1.3.什么是依赖&#xff0c…

wget下载github文件得到html文件

从github/gitee下载源文件&#xff0c;本来是22M下载下来只有11k 原因&#xff1a; Github会提供html页面&#xff0c;包括指定的文件、上下文与相关操作。通过wget或者curl下载时&#xff0c;会下载该页面 解决方式&#xff1a; github点击Code一栏的raw按钮&#xff0c;获得源…

HTTPS证书价格差异体现在哪?

HTTPS证书作为保障网站安全的重要工具&#xff0c;其类型、功能和费用差异成为用户选择时的关键考量因素。本文将深入探讨HTTPS证书的不同类型、功能以及费用差异&#xff0c;以帮助用户做出更合适的选择。 HTTPS证书的类型 HTTPS证书主要分为三种&#xff1a;DV&#xff08;D…

24证券从业考试报名『个人信息表』填写模板❗

24证券从业考试报名『个人信息表』填写模板❗ 1️⃣居住城市、通讯地址&#xff1a;写自己现居住的地址就可以。 2️⃣学历&#xff1a;需要注意的是学历填写的是考生已经取得的学历&#xff0c;在校大学生已经不具有报名资格&#xff0c;选择大专以上&#xff0c;或者是高中学…

【轨物方案】成套开关柜在线监测物联网解决方案

随着物联网技术的发展&#xff0c;电力设备状态监测技术也得到了迅速发展。传统的电力成套开关柜设备状态监测方法主要采用人工巡检和定期维护的方式&#xff0c;这种方法不仅效率低下&#xff0c;而且难以保证设备的实时性和安全性。因此&#xff0c;基于物联网技术的成套开关…

ARM架构(二)—— arm v7-a/v8/v9寄存器介绍

1、ARM v7-A寄存器 1.1 通用寄存器 V7 V8开始 FIQ个IRQ优先级一样&#xff0c; 通用寄存器&#xff1a;31个 1.2 程序状态寄存器 CPSR是程序状态毒存器&#xff0c;保存条件标志位&#xff0c;中断禁止位&#xff0c;当前处理器模式等控制和状态位。每种异常模式下还存在SPS…

MySQL之索引及简单运用

索引&#xff1a; 什么是索引 索引是数据库中一种非常重要的数据结构&#xff0c;用于帮助快速查询数据库表中的数据。它就像一本书的目录&#xff0c;能够让你快速定位到书中的某个具体章节或内容&#xff0c;而不需要一页一页地翻阅整本书。 在数据库管理系统中&#xff0c;…

Servlet 3.0的新特征

版权声明 本文原创作者:谷哥的小弟作者博客地址:http://blog.csdn.net/lfdfhlServlet 3.0概述 Servlet 3.0规范是在2009年随着Java EE 6的发布而推出的。它引入了一系列新特性和改进,旨在简化Web应用的开发和部署过程,并提高Web应用的性能和可扩展性。Servlet 3.0的发布标…