You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

VCPKG:创建本地注册表替代远程以冻结包版本并避免重复查询

基于VCPKG git-tree创建本地注册表冻结包版本的方案

一、搭建本地注册表基础结构

  1. 新建本地注册表根文件夹,比如./local-vcpkg-registry
  2. 在根文件夹下创建ports目录,将你从%APPDATA%/local/vcpkg/git-tree中复制并重命名为端口名的文件夹(如zlib、fmt)放入此目录
  3. 在根文件夹下创建versions目录,用于存储包的版本与哈希映射数据

二、利用git-tree中的baseline生成版本数据库

git-tree中带baseline.json的文件夹存储了首次安装时的包版本基线,直接复用即可:

  1. 复制git-tree中的baseline.json到本地注册表的versions目录下,保留文件名
  2. 跳过官方vcpkg add version命令(避免崩溃问题),手动为每个端口创建版本文件:
    • 在versions目录下,按包名首字母创建二级文件夹(如fmt对应f-f,zlib对应z-z)
    • 在二级文件夹内创建<包名>.json,内容参考baseline.json中对应包的条目,格式示例:
      {
        "versions": [
          {
            "git-tree": "<对应git-tree中UUID文件夹的哈希值>",
            "version": "9.1.0",
            "port-version": 0
          }
        ]
      }
      
    • 其中git-tree哈希可直接从baseline.json的对应包条目里提取,无需自行计算

三、配置项目指向本地注册表

修改项目根目录的vcpkg-configuration.json,替换远程注册表为本地路径:

{
  "registries": [
    {
      "kind": "local",
      "name": "my-local-registry",
      "path": "./local-vcpkg-registry"
    }
  ],
  "default-registry": null
}

四、处理依赖包

git-tree中a-、b-等前缀的文件夹是目标包的依赖,按以下方式复用:

  1. 将这些文件夹复制到本地注册表的ports目录,并重命名为对应的包名(可从文件夹内的vcpkg.json中查看包名)
  2. 参照步骤二,在versions目录为每个依赖包创建对应的版本文件,确保依赖链完整

五、验证效果

执行vcpkg install或触发CMake重建,VCPKG会直接查询本地注册表,检测到已安装的包后提示“所有所需包已安装”,不再访问远程注册表。

内容的提问来源于stack exchange,提问作者user34829

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 09:07:27