首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在使用清单模式时将依赖项更新为特定的git提交?

如何在使用清单模式时将依赖项更新为特定的git提交?
EN

Stack Overflow用户
提问于 2022-05-15 17:38:39
回答 1查看 436关注 0票数 0

我有一个cmake项目,它使用vcpkg来管理它的依赖项。vcpkg在“清单模式”中使用。意味着我的依赖项是在驻留在项目根目录中的vcpkg.json中指定的:

代码语言:javascript
运行
复制
{
    "name": "myproject",
    "version-string": "1.0.0",
    "builtin-baseline": "232704deb708fc866905af170b63c1a9cb821dbc",
    "dependencies": [
        {
          "name" : "imgui",
          "default-features": true,
          "features" : ["docking-experimental"]
        },
        "magnum",
        {
          "name" : "magnum-integration",        
          "default-features": false,
          "features" : ["imgui"]
        }
    ]
}

"builtin-baseline"字段包含gitsha-1,它标识了我自己维护的vcpkg存储库中的提交。

例如,magnum依赖项被配置为使用最新的“基线”版本。这意味着,如果到安装vcpkg的位置,就会有一个文件版本/baseline.json,其中确定了基线。

vcpkg有一种(复杂和非直观的)机制,可以将某些依赖项绑定到旧版本。但是,我无法找到一种结构化的方法来修改vcpkg安装,以便它将安装一个与git存储库不同的版本。vcpkg“覆盖端口”功能在清单模式下不能工作。

理想情况下,vcpkg允许我做一些简单的事情,例如:

代码语言:javascript
运行
复制
    "magnum",
        {
          "git-commit" : "dagfaghsfdg",
          "name" : "magnum-integration",        
          "default-features": false,
          "features" : ["imgui"]
        }

那么,如何将vcpkg配置为对依赖项使用特定的git提交(在清单模式下)?

EN

回答 1

Stack Overflow用户

发布于 2022-05-15 18:03:48

目前,我提出的解决方案如下。我不确定它是否理想。

我将在"magnum“依赖性上演示它。

步骤1:修改相关的vcpkg/portfile.cmake

通常,该文件将包含对一个名为vcpkg_from_github的函数的调用,该函数引用一个git标记(REF参数)。修改此参数以引用所需的提交。

代码语言:javascript
运行
复制
vcpkg_from_github(
    OUT_SOURCE_PATH SOURCE_PATH
    REPO mosra/magnum
    REF 49bcbed2f4799e7b341975a5dde98d4ba4d288d8
    SHA512 08582553725ee63eb4c6732fa6a7d82e8e0a1fed92e0e9d82035c2aa79b0df29f1fdef521768f1ef8399cef8b4550e3a8734c3a0c4f04c40ecdb7fd6c99e1bc5
    HEAD_REF master
)

SHA512也需要修改。但是由于vcpkg喜欢使事情变得困难,它不能自动推断。您必须尝试在包上安装vcpkg,失败,获取实际值,并手动设置它:

代码语言:javascript
运行
复制
vcpkg install magnum

File does not have expected hash:

          File path: [ C:/Libraries/vcpkg/downloads/mosra-magnum-72ee390afa8dd1f9d94355595ff4dc74408977fc.tar.gz ]
      Expected hash: [ 08582553725ee63eb4c6732fa6a7d82e8e0a1fed92e0e9d82035c2aa79b0df29f1fdef521768f1ef8399cef8b4550e3a8734c3a0c4f04c40ecdb7fd6c99e1bc5 ]
        Actual hash: [ 08582553725ee63eb4c6732fa6a7d82e8e0a1fed92e0e9d82035c2aa79b0df29f1fdef521768f1ef8399cef8b4550e3a8734c3a0c4f04c40ecdb7fd6c99e1bc4 ]

SHA512参数替换为Actual hash中的值。

步骤2:修改vcpkg/vcpkg.json中的版本字符串

在这个文件中有一个版本字段。把它变成有意义的东西。

代码语言:javascript
运行
复制
  "name": "magnum",
  "version-string": "2022.00",
  "port-version": 0

我还将port-version更改为0。

步骤3:修改基线

如果您希望使用非清单模式,步骤1和步骤2就足够了。但是,如果希望使用清单,则必须修改基线。

在版本/baseline.json中,将基线更改为新版本(与端口文件匹配)。

代码语言:javascript
运行
复制
"magnum": {
  "baseline": "2022.00",
  "port-version": 0
},

步骤4:注册新版本的

在版本目录中,有按字母顺序排列的目录,其中的文件列出了每个库的可用版本。例如,magnum.json:

代码语言:javascript
运行
复制
  "versions": [
    {
      "git-tree": "39331fa0e35e058c25f2ee188ca816343111c232",
      "version-string": "2022.00",
      "port-version": 0
    },
    ...

因此,您需要添加一个新的版本条目。现在," git -tree“字段是,而不是-git提交。这是一个吉特物体-id。为了获得它,您需要首先将当前对vcpkg目录所做的所有更改提交给do:

代码语言:javascript
运行
复制
git rev-parse HEAD:ports/magnum

将输出复制到git-tree字段。

步骤5:对您更改的的依赖项的其他依赖项重复此操作

在我的例子中,magnum依赖于"corrade“库,所以我不得不在那里做同样的修改。

步骤6:更改内置-基线

将所有更改提交到vcpkg存储库,修改清单文件(vcpkg.json) builtin-baseline字段,以引用vcpkg.json中的最新提交。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72250699

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档