本地 vcpkg 共用 Registry 規劃與使用指南
在一個組織或多個倉庫 (repo) 之間共用自訂 C++ 套件 (ports),可建立一個本地 vcpkg registry。透過 filesystem registry:
pathinfo)。C:/vcpkg-registry/
ports/
pathinfo/
portfile.cmake
vcpkg.json
versions/
p-/
pathinfo.json
baseline.json
ports/<name>: 放置單一 port 定義。
versions/<first-letter>/<name>.json: 每個版本的索引。
baseline.json: 指定 registry 的預設版本錨點。
C:/vcpkg-registryports, versions/p-。pathinfo port 複製到:C:/vcpkg-registry/ports/pathinfo/。
portfile.cmake, vcpkg.json。C:/vcpkg-registry/versions/p-/pathinfo.json{
"versions": [
{
"version-string": "1.0.0",
"port-version": 0,
"git-tree": "<COMMIT_OR_TREE_ID>"
}
]
}
說明:git-tree 可用來源 repo 的 git tree hash(若無版本控管可暫填假值並後續修正)。C:/vcpkg-registry/baseline.json
{
"default": {
"pathinfo": {
"version-string": "1.0.0",
"port-version": 0
}
}
}
vcpkg.json (port) 內含正確 name, version-string, supports。git clone https://github.com/microsoft/vcpkg C:/vcpkg
C:/vcpkg/bootstrap-vcpkg.bat
C:/vcpkg/vcpkg.exe 加入 PATH。set VCPKG_FEATURE_FLAGS=manifests (或使用 vcpkg >= 已預設啟用)。在每個專案根目錄:
vcpkg-configuration.json:
{
"default-registry": {
"kind": "builtin",
"baseline": "<builtin-baseline-date-or-tag>"
},
"registries": [
{
"kind": "filesystem",
"path": "C:/vcpkg-registry",
"packages": ["pathinfo"]
}
]
}
baseline 可從官方 vcpkg repo versions/baseline.json 取得 (建議鎖定)。vcpkg.json (manifest):
{
"name": "myapp",
"version-string": "0.1.0",
"dependencies": ["pathinfo"]
}
cmake -B build -S . -DCMAKE_TOOLCHAIN_FILE=C:/vcpkg/scripts/buildsystems/vcpkg.cmake
cmake --build build --config Release
CMAKE_TOOLCHAIN_FILE。#include <pathinfo/PathInfo.h>
// link: target_link_librariespathinfo
ports/pathinfo/。versions/p-/pathinfo.json 加入新版本條目。vcpkg install / CMake configure。VCPKG_ROOT 指向 C:/vcpkg,減少重複 bootstrap。 CMAKE_MSVCIDE_RUN_PATH 或 VCPKG_DEFAULT_TRIPLET 設定預設三合一 (如 x64-windows)。vcpkg.json 宣告依賴,避免手動安裝與 global state 汙染。 vcpkg-configuration.json,依 registries 列表尋找對應 packages;若找不到則 fallback 到 builtin registry。 ports/<name> + versions/<prefix>/<name>.json + baseline.json。 version-string + port-version 比對與升級。 x64-windows) 建置並放入 installed/<triplet>/;CMake toolchain 會自動設定 include/link path。 vcpkg-configuration.json 路徑是否正確放在專案根。 vcpkg x-add-version --all (官方工具) 自動生成 versions 檔案 (需在 registry git repo 上)。 vcpkg install --debug 查看解析過程。 packages 陣列是否包含名稱,或移除 packages 讓 registry 提供所有 ports。 # 於專案根
vcpkg install
# 生成 build
cmake -B build -S . -DCMAKE_TOOLCHAIN_FILE=C:/vcpkg/scripts/buildsystems/vcpkg.cmake
cmake --build build --config Debug
installed/ 以加速建置。 | 問題 | 原因 | 解法 |
|---|---|---|
| 找不到 port | 路徑/registries packages 限制 | 確認 path 與 packages 設定 |
| 版本未更新 | baseline 未改 | 更新 baseline.json |
| include 失敗 | 未使用 toolchain | 加入 -DCMAKE_TOOLCHAIN_FILE |
| triplet 不符 | 預設 triplet 未指定 | 設定 VCPKG_DEFAULT_TRIPLET |
本文件可供多個 C++ 專案快速導入本地共享 vcpkg registry。
| File8 | File | Last Modified |
|---|---|---|
| vcpkg_checker | vcpkg_checker | 1:22 AM - December 07, 2025 |
| vcpkg 指令總覽表 | vcpkg 指令總覽表 | 1:22 AM - December 07, 2025 |
| 模組化開發-用 CMake + VCpkg 封裝並重用 C++ 函式庫 | 模組化開發-用 CMake + VCpkg 封裝並重用 C++ 函式庫 | 8:20 PM - December 06, 2025 |
| 模組化開發-VCpkg工具 | 模組化開發-VCpkg工具 | 8:20 PM - December 06, 2025 |
| 查詢目前vcpkg registry所在路徑 | 查詢目前vcpkg registry所在路徑 | 8:20 PM - December 06, 2025 |
| 本地 `src` vs. `vcpkg_from_git` | 本地 src vs. vcpkg_from_git | 8:20 PM - December 06, 2025 |
| 如何產生 git-tree | 如何產生 git-tree | 8:20 PM - December 06, 2025 |
| 使用 vcpkg x-add-version 搭配 Git 或目錄結構工具,自動建立與維護本地 vcpkg registry | 使用 vcpkg x-add-version 搭配 Git 或目錄結構工具,自動建立與維護本地 vcpkg registry | 8:20 PM - December 06, 2025 |