二进制缓存

vcpkg 公共注册表中的大多数端口都是从源生成的。 通过从源生成,vcpkg 可以使用相同的环境、生成工具、编译器标志、链接器标志以及你在项目中用于生成依赖项的其他配置来确保最大兼容性。

当二进制缓存被启用时,从源生成每个包后,vcpkg 将创建二进制包。 二进制包保存包的生成输出:二进制文件、生成系统集成文件、使用情况文档、授权许可以及其他文件。 如果以后的运行需要安装缓存包,vcpkg 将确定是还原缓存的二进制包,还是触发从源中生成。

这样,二进制缓存可以减少以下从源中生成的缺点造成的影响:

  • 重复的工作:通过减少需要从源中生成包的次数。
  • 较长的生成时间:还原二进制包通常是一项非常快速的操作,需要几秒钟即可完成。

二进制缓存在 CI 应用场景中特别有效,即临时容器或生成代理每次都强制 vcpkg 从头开始。 通过使用基于云的二进制缓存(例如 GitHub 包Azure DevOps Artifacts),可以在两次运行之间持久保存二进制包,以确保最大速度,因为重新生成只发生在对依赖项或配置进行更改时。

提示

建议针对每个持续集成管道或工作流创建具有读取和写入权限的二进制缓存。 单个开发人员应对持续集成生成的二进制缓存拥有只读访问权限。

二进制缓存可以托管在各种不同的环境中。 二进制缓存中最基本的形式是本地计算机或网络文件共享上的文件夹。 缓存也可以存储在任何 NuGet 源(例如 GitHub 包或 Azure DevOps Artifacts)、Azure Blob 存储、Google Cloud Storage 和许多其他服务中。

如果持续集成提供本地“缓存”功能,则建议同时使用 vcpkg 二进制缓存和本机方法以实现最佳性能。

重复使用二进制缓存进行开发

虽然不建议将二进制缓存作为二进制分发机制,但可将其用于重复使用来自多个系统的生成输出。 例如,开发人员可以使用在其本地计算机上运行的 CI 生成的二进制包。 有关重复使用和集成 vcpkg 生成的二进制文件的其他方法,请查看 vcpkg export

例如,可以将托管在 Azure Artifacts 上的 NuGet 源配置为接受从 CI 管道生成的二进制包,并在开发环境中重复使用这些包。

您需要配置 Azure Artifacts 源,以 授予对 Azure DevOps 管道 的读取和写入权限,并为开发团队中的主机授予只读权限。

默认的二进制缓存

默认情况下,位于第一个有效位置的 files 提供程序会启用二进制缓存:

  • Windows
  1. %VCPKG_DEFAULT_BINARY_CACHE%
  2. %LOCALAPPDATA%\vcpkg\archives
  3. %APPDATA%\vcpkg\archives
  • 非 Windows
  1. $VCPKG_DEFAULT_BINARY_CACHE
  2. $XDG_CACHE_HOME/vcpkg/archives
  3. $HOME/.cache/vcpkg/archives

可通过 vcpkg help binarycaching 获得减少的工具内帮助。

二进制缓存仅涵盖生成的二进制文件。 若要缓存源文件和预生成工具,请参阅资产缓存

后续步骤

阅读教程,了解如何设置二进制缓存和配置语法参考