我有一个cmake项目,它使用vcpkg来管理它的依赖项。vcpkg在“清单模式”中使用。意味着我的依赖项是在驻留在项目根目录中的vcpkg.json中指定的:
{
"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允许我做一些简单的事情,例如:
"magnum",
{
"git-commit" : "dagfaghsfdg",
"name" : "magnum-integration",
"default-features": false,
"features" : ["imgui"]
}
那么,如何将vcpkg配置为对依赖项使用特定的git提交(在清单模式下)?
发布于 2022-05-15 18:03:48
目前,我提出的解决方案如下。我不确定它是否理想。
我将在"magnum“依赖性上演示它。
步骤1:修改相关的vcpkg/portfile.cmake
通常,该文件将包含对一个名为vcpkg_from_github
的函数的调用,该函数引用一个git标记(REF
参数)。修改此参数以引用所需的提交。
vcpkg_from_github(
OUT_SOURCE_PATH SOURCE_PATH
REPO mosra/magnum
REF 49bcbed2f4799e7b341975a5dde98d4ba4d288d8
SHA512 08582553725ee63eb4c6732fa6a7d82e8e0a1fed92e0e9d82035c2aa79b0df29f1fdef521768f1ef8399cef8b4550e3a8734c3a0c4f04c40ecdb7fd6c99e1bc5
HEAD_REF master
)
SHA512也需要修改。但是由于vcpkg喜欢使事情变得困难,它不能自动推断。您必须尝试在包上安装vcpkg,失败,获取实际值,并手动设置它:
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中的版本字符串
在这个文件中有一个版本字段。把它变成有意义的东西。
"name": "magnum",
"version-string": "2022.00",
"port-version": 0
我还将port-version
更改为0。
步骤3:修改基线
如果您希望使用非清单模式,步骤1和步骤2就足够了。但是,如果希望使用清单,则必须修改基线。
在版本/baseline.json中,将基线更改为新版本(与端口文件匹配)。
"magnum": {
"baseline": "2022.00",
"port-version": 0
},
步骤4:注册新版本的
在版本目录中,有按字母顺序排列的目录,其中的文件列出了每个库的可用版本。例如,magnum.json:
"versions": [
{
"git-tree": "39331fa0e35e058c25f2ee188ca816343111c232",
"version-string": "2022.00",
"port-version": 0
},
...
因此,您需要添加一个新的版本条目。现在," git -tree“字段是,而不是-git提交。这是一个吉特物体-id。为了获得它,您需要首先将当前对vcpkg目录所做的所有更改提交给do:
git rev-parse HEAD:ports/magnum
将输出复制到git-tree字段。
步骤5:对您更改的的依赖项的其他依赖项重复此操作
在我的例子中,magnum依赖于"corrade“库,所以我不得不在那里做同样的修改。
步骤6:更改内置-基线
将所有更改提交到vcpkg存储库,修改清单文件(vcpkg.json) builtin-baseline
字段,以引用vcpkg.json中的最新提交。
https://stackoverflow.com/questions/72250699
复制相似问题