首页 > 编程语言 >C++ 好用的包管理工具--vcpkg

C++ 好用的包管理工具--vcpkg

时间:2024-10-25 10:59:50浏览次数:6  
标签:命令 -- C++ 编译 开源 Vcpkg vcpkg 安装

https://blog.csdn.net/lizhichao410/article/details/132339064

 

背景
Windows 下开发 C/C++ 程序,少不了编译开源的第三方库,使用这些库开发极大的方便了程序员,使得我们不必重复造轮子。

由于开源库绝大部分都来源于 Linux 系统、将其移植到 Windows 的 VC 开发环境下编译比较复杂和麻烦;而且我们还需要考虑编译出哪种类型的开源库程序,比如:Debug/Release、动态库/静态库、MD/MT、32位/64位,管理起来也很麻烦。

Vcpkg
概述
Vcpkg 是微软社区开发的一个跨平台的 C++ 包管理工具。它旨在解决 C++ 开发过程中依赖管理的痛点,它支持多个操作系统,包括:Windows、Linux和 macOS,使开发者能够更加便捷地安装、管理和更新 C++ 项目所需的第三方库。

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

跨平台支持:Vcpkg 支持 Windows、Linux 和 macOS 等多个主流操作系统,使得开发者能够在不同的环境下进行一致的依赖管理。
自动解决依赖:Vcpkg 能够自动处理库之间的依赖关系,简化了依赖管理的复杂性,并且能够提供一致的库版本。
简单易用:Vcpkg 的命令行接口使得安装、更新和卸载库都变得简单快捷,节省了开发者的时间。
集成 Visual Studio:不需要设置库文件、头文件的所在目录,自动集成。
Vckpg 下载和安装
概述
Vcpkg 大量使用 psl 脚本,所以官方强烈推荐使用 PowerShell 而不是 CMD 命令行来执行各种操作,建议使用 7 以上版本。

安装 Vcpkg
创建安装目录
先创建一个安装目录,如:C:\vcpkg,然后打开该目录:

cd C:/vcpkg
1
clone 官方 git 仓库
git clone https://github.com/microsoft/vcpkg
1


编译 vcpkg
切换目录到 vcpkg 仓库文件夹:

cd vcpkg
1
执行引导脚本:

./bootstrap-vcpkg.bat
1
成功执行完成后,在目录中可以看到文件 vcpkg.exe:


添加环境变量
将 vcpkg.exe 的路径添加到环境变量,即可在任意位置执行 vcpkg 命令:

 

更新 Vcpkg
概述
vcpkg 包管理器在 GitHub 上定期更新。 若要将 vcpkg 的克隆更新到最新版本,执行 git pull 命令即可。

更新下载完成后,再次运行引导程序会重新生成 vcpkg 程序,但保留已安装的库。

git pull
进入 vcpkg目录,然后执行 git pull 命令:

git pull
1


再次执行引导脚本:

./bootstrap-vcpkg.bat
1


Vcpkg 使用
安装一个开源库
这里以安装 spdlog 库为例进行演示。安装第三方开源库的命令为 vcpkg install pkgname。

默认安装
如果不指定安装的架构,vcpkg 默认把开源库编译成 x86 的 Windows 版本的库:

vcpkg install spdlog
1
执行结果如下:

 

编译完成后可以在目录中看到库的位置:

 

指定位数安装
如果要安装编译某一个架构的开源库,我们只需要在需要安装的包后面指定相应的 triplet 即可。例如要编译 64 位 Windows 版本的 spdlog,执行如下命令:

vcpkg install spdlog:x64-windows
1
命令执行完成后可以在目录中查看新编译的库:

 

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

vcpkg install spdlog:x64-windows-static
1
删除一个开源库
要删除一个已安装的开源库的命令为:vcpkg remove pkgname:

vcpkg remove spdlog:x64-windows
1


执行库删除命令后,其源码包和解压缩的源码并没有删除,若再次安装直接进行编译步骤:

 

更新一个开源库
列出需要更新的库
可以使用 update 或者 upgrade 命令列出需要更新的库:

vcpkg update
1


也可以使用 upgrade 命令:


vcpkg upgrade
1
更新过时的库
不带参数使用 upgrade 命令时将一次升级所有过时的库。但默认情况下 upgrade 命令只列出要升级的库,但不升级它们。

要有效地升级它们,应该使用 -no-dry-run 选项:

vcpkg upgrade --no-dry-run
1

————————————————

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

原文链接:https://blog.csdn.net/lizhichao410/article/details/132339064

标签:命令,--,C++,编译,开源,Vcpkg,vcpkg,安装
From: https://www.cnblogs.com/WaLi/p/18502066

相关文章

  • Go语言的移动开发能力和工具
    ###Go语言的移动开发能力和工具在探讨Go语言的移动开发能力和工具时,可以明确地说,Go语言支持移动开发,并提供了一系列工具和库来支持这一过程。Go的移动开发能力主要体现在其对Android和iOS平台的应用开发支持、提供的gomobile工具、以及对跨平台开发的支持。特别地,gomobile工具......
  • 题解:CF1994B Fun Game
    涉及知识点:异或,字符串处理。解题思路‌异或是一种二进制运算,用于比较两个数字的差异。当两个输入不同时,异或运算的结果为1;当两个输入相同时,结果为0。现在就可以切掉本题了。设两个字符串分别为$a$,$b$。如果$a$和$b$完全相同,输出Yes。如果$a$中没有$1$且$b$......
  • 题解:CF633D Fibonacci-ish
    涉及知识点:枚举,STL。题目大意给你一个序列,让你选出一些元素,使其构成fibonacccccci数列,求数列的最大长度。解题思路定义一个桶,$mp_i$代表$i$这个数在输入序列当中出现的次数。由于$n\le1000$,所以可以直接暴力枚举fibonacccccci数列的前两个数。前两个数固定了,这......
  • golang slice相关常见的性能优化手段
    介绍一些开发中常用的slice关联的性能优化手段。鉴于golang编译器本身捉鸡的优化能力,优化的成本就得分摊在开发者自己的头上了。这篇文章会介绍的优化手段是下面这几样:创建slice时预分配内存操作slice前预分配内存slice表达式中合理设置cap值添加多个零值元素的优化循环展......
  • JVM - 清单
    JVM内存布局是怎样的Java对象的布局是怎么样的对象分配策略是怎么样,什么是空间分配担保机制GCroots有哪些ThreadLocal内存泄漏的原因GC算法有哪些,垃圾收集器有哪些,各自特点类的生命周期类Class对象被回收的条件有哪些类加载器,什么是双亲委派流程......
  • 【接口】websocket
    背景HTTP(超文本传输协议)缺点:缺乏数据加密、身份验证和会话管理等安全特性;HTTP链接的半双工的,而且通信只能由客户端发起,服务端无法将数据主动推送给客户端HTTPS(安全超文本传输协议):为了解决HTTP的缺点,提出HTTPS,提供传输的安全性websocket:为了解决"HTTP链接的半双工的,而且通信只......
  • 人工智能:引领未来变革的关键力量
    前言随着人工智能技术的迅速发展,它在各行业引发了深刻变革。这里主要探讨人工智能在医疗、企业和日常生活中的应用,并分析了其对未来生活和工作方式的影响。随着科技的飞速发展,人工智能(AI)已成为当今社会最为关注的领域之一。AI技术的进步正为各行各业带来前所未有的变革。......
  • 基于SpringBoot+Vue旅行推广网站的设计与实现
    博主主页:一季春秋博主简介:专注Java技术领域和毕业设计项目实战、Java、微信小程序、安卓等技术开发,远程调试部署、代码讲解、文档指导、ppt制作等技术指导。主要内容:SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs、Python、小程序、安卓app、大数据等设计与开发。感兴趣的可......
  • 抛砖引玉
    题目背景类以诱之,击蒙也。题目描述刘老师认为质数是玉。现在他给你一个不包含数位 00 的整数 nn,请你看看能否通过重新排列数位来把这个整数变为质数。如果可以,输出可以变成的最小的一个质数,否则输出 −1−1。输入格式一个数 nn。输出格式输出重排数位(也可以不重......
  • 【32】C++流
    C++流IO: 向设备输入数据和输出数据C++的IO流设备: 文件控制台特定的数据类型(stringstream)c++中,必须通过特定的已经定义好的类, 来处理IO(输入输出)读写文件:文件流文件流: 对文件进行读写操作头文件:  <fstream>类库:   ifstream   对文件输入(读......