vcpkg:跨平台 C++ 包管理器的安装教程

时间:2024-02-22 15:03:51

此文档侧重于 Windows

 

1. vcpkg 简介

  1.1  原理

  1.2  目录结构

  1.3  优点

2. vcpkg 获取

  2.1  下载

  2.2  编译

3. vcpkg 使用

  3.1  查看支持的开源库列表

  3.2  安装一个开源库

  3.3  移除一个开源库(已安装)

  3.4  列出已安装的开源库

  3.5  更新已安装的开源库

  3.6  导出已安装的开源库

  3.7  导入已备份的开源库

4.    vcpkg 和 visual studio 的集成

 

1. vcpkg 简介

  vcpkg 是适用于 C/C++ 库的跨平台命令行包管理器,由 C++ 团队使用 C++ 开发的。它简化了 Windows、Linux 和 macOS 上第三方库的安装,同时支持开源库和专有库。vcpkg 目录中的库与 VS2017/VS2019兼容。

  1.1  原理

  vcpkg 是 github 上提供的开放源代码项目。vcpkg 存储库的克隆或本地副本包含 vcpkg 可执行文件和目录,这是描述库及其选项的包的列表 。 每个包都包含一个或多个端口,还包括有关如何从源获取和生成库的信息,或为特定目标环境下载二进制版本的信息。 使用 vcpkg 安装库时,它会使用包和端口信息在 vcpkg 目录的子目录中下载并生成库的本地副本,供你使用。

  对于使用特定编译器版本的标准化团队而言,可让一位成员使用 vcpkg 下载源码并编译,导出库文件或创建一个 NuGet 包。 然后,可以轻松地将它与其他团队成员共享。

  1.2  目录结构

  •  buildtrees  -  包含从中生成每个库的源的子文件夹。
  •  docs  -  文档和示例。
  •  download  -  已下载的工具或源的缓存副本。 运行安装命令时,vcpkg 会首先搜索此处。
  •  installed  -  包含每个已安装库的标头和库文件。 与 Visual Studio 集成时,实质上是相当于告知它将此文件夹添加到其搜索路径。
  •  packages  -  在不同的安装之间用于暂存的内部文件夹。
  •  ports  -  用于描述每个库的目录、版本和下载位置的文件。 如有需要,可添加自己的端口。
  •  scripts  -  由 vcpkg 使用的脚本(CMake、PowerShell)。
  •  toolsrc  -  vcpkg 和相关组件的 C++ 源代码。
  •  triplets  -  包含每个受支持目标平台(如 x86-windows 或 x64-uwp)的设置。
  •  versions

  1.3  优点

  •  自动下载开源库源代码。
  •  源码包的缓存管理和版本管理,可以升级版本。
  •  轻松编译。
  • 依赖关系检查(比如编译libcurl,会自动下载zlib、openssl进行编译)。
  • 无缝集成Visual Studio,不需要设置库文件、头文件的所在目录,自动集成。
  •  Visual Studio全平台支持,不仅支持Debug/Release、x86/x64编译,还支持UWP、ARM平台的编译。

2. vcpkg 获取

  2.1  下载

  防止遇到路径问题,存放目录不包含中文。如:D:\src\vcpkg。启动 Git Bash 控制台,进入存放目录,输入:

  > git clone https://github.com/microsoft/vcpkg

  注意:git clone速度太慢是因为 github.global.ssl.fastly.net 域名被限制了,我们只需使用 github 的镜像网站进行访问,将地址中的 github.com 替换为 github.com.cnpmjs.org,即:

  > git clone https://github.com.cnpmjs.org/microsoft/vcpkg

  2.2  编译

  命令行执行 vcpkg 工程目录下的 “bootstrap-vcpkg.bat” 命令,即可编译。编译好以后会在同级目录下生成 vcpkg.exe 文件。

  > .\vcpkg\bootstrap-vcpkg.bat

  注意:vcpkg 大量使用的 psl 脚本,所以官方强烈推荐使用 PowerShell 而不是 cmd 命令行来执行各种操作。尽管在使用的时候兼容 cmd,但是在编译这一步,请尽量使用 PowerShell,工具位于  \vcpkg\downloads\tools 路径下。

3. vcpkg 使用

  3.1  查看支持的开源库列表

  > vcpkg search

  3.2  安装一个开源库

  这里的“安装“其实是指下载和编译。大致会经历这几个过程:

  •  环境初始化。
  •  下载源代码(如果已经在cache中,则不下载)。
  •  校验文件有效性。
  •  解压缩源代码。
  •  利用配套工具配置源码工程,在这里是使用的是cmake。

  另外,vcpkg 支持以下多种架构,如不指定默认编译成 x86 的 Windows 版本库。

  •  arm-uwp
  •  arm-windows
  •  arm64-uwp
  •  arm64-windows
  •  x64-uwp
  •  x64-windows-static
  •  x64-windows
  •  x86-uwp
  •  x86-windows-static
  •  x86-windows

  比如我们要安装 x64-windows 版本的 curl 库:

  > vcpkg install curl:x64-windows

  注意:这里的arm架构特指类似于surface这种运行在arm处理器上的Win10平台,而并非我们传统意义上的Linux或android的ARM平台。

  3.3  移除一个开源库(已安装)

  想移除一个已经安装的开源库,那么执行 remove 指令即可。比如我们要移除 curl 库:

  > vcpkg remove curl

  注意:1. 默认移除 x86-winodws 版本库,如需移除其他版本库,需指定。2. 只移除库本身,源码包和解压后的源码并未移除。

  3.4  列出已安装的开源库

  > vcpkg list

  3.5  更新已安装的开源库

  想要更新已安装的开源库,一般有两个指令:一个是update指令,可以显示可以升级的开源库的列表;另一个是upgrade的指令,会重新编译所有需要更新的包。

  3.6  导出已安装的开源库

  想要导出已安装的开源库,那么执行 export 指令即可。比如我们要导出 curl 库:

  > vcpkg export curl --7zip

  注意:默认导出 x86-windows 版本库,如需导出其他版本,需指定。

     默认导出 vcpkg 目录下,默认导出包名称 vcpkg-export-日期-时间,如需指定目录和名称,使用 “-output=” 参数。

     导出必须指定包格式:

       --raw:以目录格式导出

       --nuget:以 nuget 格式导出

       --ifw:未知

       --zip:以 zip 格式导出

       --7zip:以 7z 格式导出

  3.7  导入已备份的开源库

  想要导入已导出的开源库,那么执行 import 指令即可。

  > vcpkg import xxx.7z

4. vcpkg 和 Visual Studio 的集成

  常规情况下,我们编译或安装一些第三方库后,需要手动设置 include 目录、lib 目录、环境变量等,会有很多工作量。vcpkg 提供了一套机制,可以全自动的适配目录,而开发者不需要关心已安装的库的目录在哪里,也不需要设置。这是vcpkg的一大优势。

  集成指令:

  > vcpkg integrate install

  移除集成指令:

  > vcpkg integrate remove

  注意:兼容 Visual Studio 2017/2019 。Visual Studio 2015 未测试。

 

 

  参考链接:https://blog.csdn.net/cjmqas/article/details/79282847