天天看點

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 自定義的字元串值
packages 依賴的庫
repository

任何滿足git倉庫格式的URL,如:

"https://github.com/microsoft/vcpkg"

[email protected]: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

VCPKG 團隊期待您的貢獻!