VCPKG 特性 - Registries
背景
目前vcpkg提供了大概1500+个库,已经能满足大多数的用户需求。但是对于许多的企业用户来说,因为一些特殊原因,他们更倾向于自己来管理控制所依赖的库。现在vcpkg提供了一种解决方案,即registries,可以很方便的帮助用户来设置使用自定义的的库。
配置
在vcpkg中,注册表就是库与库之间的不同版本的组合,vcpkg本身就是一个注册表。用同样的方式可以创建并使用一个注册表,目前主要有两种方式可以实现:git registries 与 filesystem registries。
Git registries
简单来说,git 注册表就是一个简单的git 仓库,包含所需要的文件,可以通过git 仓库的正常方式来实现私有分享或者公共分享,例如:vcpkg git库。
Filesystem registries
文件系统注册表就是所创建的注册表只在文件系统中,唯一办法就是通过文件共享来共享给其他人,对于非git的版本控制项目来说,这种方式还是很实用的。
vcpkg-configuration.json
使用注册表需要创建配置文件 vcpkg-configuration.json,该文件是一个JSON 文件,它包含了一个项目使用注册表需要定义的所有信息。在经典模式下,该文件放置在vcpkg根目录下;在manifest 模式下,该文件必须与vcpkg.json放置于同级目录下,且该文件名称固定为vcpkg-configuration.json。
示例:
{ "default-registry": { "kind": "git", "baseline": "9b2d0f4a4dac1a32ee2d89b3cf39e3a3e777eb8c", "repository": "https://github.com/PhoebeHui/vcpkg-registry" }, "registries": [ { "kind": "git", "baseline": "9b2d0f4a4dac1a32ee2d89b3cf39e3a3e777eb8c", "repository": "https://github.com/PhoebeHui/vcpkg-registry", "packages": [ "beicode", "fmt"] }, { "kind": "filesystem", "baseline": "2021-04-08", "path": "E:/vcpkg/vcpkgtest/registries/filesystem", "packages": [ "beison"] }, { "kind": "builtin", "baseline": "d306ab43c77c28d2f1d002093db6d4386cd7b333", "packages": ["asmjit"] } ] }
其中,必须包含kind 与baseline 字段,除外,不同类型的注册表有不同的必须要定义的字段,Git 注册表必须包含repository字段,文件系统注册表必须包含path字段,kind,baseline,repository字段必须是一个字符串类型,path必须是一个路径。
以下是不同注册表类型所对应的字段的值:
字段 |
Git 注册表(值) |
文件系统注册表(值) |
built-in注册表(值) |
必选/可选 |
kind |
git |
filesystem |
builtin |
必选 |
baseline |
commit ID |
自定义的字符串值 |
commit ID |
必选 |
packages |
依赖的库 |
依赖的库 |
依赖的库 |
必选 |
repository |
任何满足git仓库格式的URL,如: "https://github.com/microsoft/vcpkg" git@github.com:microsoft/vcpkg "/dev/vcpkg-registry"
|
/ |
/ |
Git 注册表必选 |
path |
/
|
绝对路径 相对路径:基于vcpkg-configuration.json定义值来拼接查找。
|
/ |
文件系统注册表必选 |
default-registry 定义了默认的注册表,若所需要的库在 'registries' 中查找不到时,就会从默认的注册表中查找;若default-registry 为空,则默认使用vcpkg中的注册表。
regiestries 是一个注册表对象数组,其中包含packages 字段,packages字段是由库名组成的数组,它指定了当前项目需要使用的库的名称。注意,packages字段中的库名是不能重复的。
built-in:Kind 值设为 'built-in',那么就会指定使用vcpkg 提供的库。注意,区别于versioning feature,它只会从本地vcpkg库中查找,不会去远程vcpkg的仓库中查找,所以设置baseline的值时,可以用本地最新的commmit id 作为 baseline值,或者任意给一个commit id,错误信息中会给出建议的值作为baseline的值。
下一篇博客会单独给出使用示例。
参考:
https://github.com/microsoft/vcpkg/blob/master/docs/users/registries.md
https://github.com/microsoft/vcpkg/blob/master/docs/specifications/registries.md
https://github.com/microsoft/vcpkg/blob/master/docs/specifications/registries-2.md