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

 

posted @ 2021-08-20 18:35  vcpkg_C++包管理器  阅读(522)  评论(0编辑  收藏  举报