覆盖端口

通常,vcpkg 端口是从注册表获取的。 你安装的大多数端口很可能来自于 https://github.com/Microsoft/vcpkg 上的官方 vcpkg 注册表。 vcpkg 可让你通过文件系统安装可用的端口,我们将这些端口称为覆盖端口。

覆盖端口可以直接替代现有端口,也可以充当注册表中不可用的新端口。 解析包名称时,优先解析覆盖端口的名称。

按以下顺序计算覆盖端口:

解析端口名称时,选择包含匹配覆盖端口的第一个位置。

使用覆盖端口

目录可以表示一组覆盖端口,可通过以下两种方式之一指定:

  • 单个覆盖端口:<directory>/sqlite3 指单个端口
  • 覆盖端口目录:<directory> 指端口目录:有效端口必须同时包含 vcpkg.jsonportfile.cmake

可以通过多种方式添加覆盖端口:

  • 命令行:向 vcpkg 命令添加一个或多个 --overlay-ports=<directory> 选项
  • 清单:在 "overlay-ports" 中填充 vcpkg-configuration.json 数组
  • 环境变量:将 VCPKG_OVERLAY_PORTS 设置为目录路径列表

示例:覆盖端口示例

假设目录结构如下:

包含多个覆盖端口目录的示例

名为 team-ports 的覆盖目录包含端口 sqlite3、rapidjson 和 curl。 名为 team-ports 的覆盖目录包含端口 sqlite3 和 rapidjson。 vcpkg 目录包含默认注册表。

运行:

vcpkg install sqlite3 --overlay-ports=my-ports --overlay-ports=team-ports

若要进行安装:

  • sqlite3 来自 my-ports

运行:

vcpkg install sqlite3 rapidjson curl
    --overlay-ports=my-ports/rapidjson
    --overlay-ports=vcpkg/ports/curl
    --overlay-ports=team-ports

若要进行安装:

  • sqlite3 来自 team-ports
  • rapidjson 来自 my-ports
  • curl 来自 `vcpkg/ports

示例:使用覆盖端口以使用系统包管理器依赖项

若要对 vcpkg 依赖项使用系统包管理器依赖项,请参阅我们的博客文章