背景
目前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 團隊期待您的貢獻!