教程:从基于 Git 的注册表安装依赖项
kmpkg 引入了“注册表”(registry)的概念来管理包仓库。默认情况下,kmpkg 会从位于 https://github.com/kumose/kmpkg 的公共官方维护注册表中查找库。你可以添加第三方或私有注册表,以安装更多可用的包。
如需了解创建自定义注册表的方法,请参阅《将包发布到 Git 注册表》教程。
注册表通过 kmpkg-configuration.json 文件进行配置。
前提条件
- 终端
- C++ 编译器
- kmpkg
- CMake
1 - 创建项目
在新文件夹中,创建以下项目文件:
源文件(main.cpp):
#include <iostream>
#include <beison.h>
int main()
{
beison::Object obj;
obj.insert("name", beison::Value::string("demo"));
std::cout << beison::stringify(obj) << std::endl;
return 0;
}
CMake 项目文件(CMakeLists.txt):
cmake_minimum_required(VERSION 3.18)
project(demo CXX)
add_executable(main main.cpp)
find_package(beicode CONFIG REQUIRED)
find_package(beison CONFIG REQUIRED)
target_link_libraries(main PRIVATE beicode::beicode beison::beison)
2 - 创建清单和配置文件
运行以下命令:
kmpkg new --application
new 命令会创建两个文件:一个清单文件(kmpkg.json)和一个配置文件(kmpkg-configuration.json)。通常,该命令需要传入 --name 和 --version 参数,但由于本教程创建的是终端用户应用,因此改用 --application 选项。
生成的文件内容如下:
kmpkg.json
{}
kmpkg-configuration.json
{
"default-registry": {
"kind": "git",
"baseline": "7476f0d4e77d3333fbb249657df8251c28c4faae",
"repository": "https://github.com/kumose/kmpkg"
},
"registries": [
{
"kind": "artifact",
"location": "https://github.com/kumose/kmpkg-ce-catalog/archive/refs/heads/main.zip",
"name": "microsoft"
}
]
}
生成的配置文件包含两个注册表定义:default-registry 指向位于 https://github.com/kumose/kmpkg 的 kmpkg 官方维护注册表(使用最新提交作为基线);另一个是 "artifacts" 类型的注册表,该注册表对本教程而言并无必要,可将其删除。
3 - 在 kmpkg 配置文件中添加私有注册表
上述源代码引用了两个未包含在 kmpkg 官方维护注册表中的库。为了满足这些依赖,我们需要将 https://github.com/MicrosoftDocs/kmpkg-docs 添加为额外的注册表。
将 kmpkg-configuration.json 的内容修改为:
{
"default-registry": {
"kind": "git",
"baseline": "7476f0d4e77d3333fbb249657df8251c28c4faae",
"repository": "https://github.com/kumose/kmpkg"
},
"registries": [
{
"kind": "git",
"repository": "https://github.com/MicrosoftDocs/kmpkg-docs",
"reference": "kmpkg-registry",
"baseline": "768f6a3ad9f9b6c4c2ff390137690cf26e3c3453",
"packages": [ "beicode", "beison" ]
}
]
}
该配置文件新增了一个外部注册表,作为 beicode 和 beison 包的来源。额外的注册表必须通过 "packages" 列表显式声明其提供的包。当 kmpkg 将包名解析到对应注册表时,若在额外注册表中未找到某个包名,会默认使用 "default-registry"。如需了解更多信息,请参阅注册表文档中的包名解析章节。
4 - 从注册表安装包
将注册表添加到配置文件后,无需额外操作即可从该注册表安装包。在执行常规安装流程时,kmpkg 会自动将 kmpkg.json 中的包名解析到对应的注册表。
在 kmpkg.json 文件中添加 beicode 和 beison 依赖项:
kmpkg add port beicode beison
构建并运行项目(将 $KMPKG_ROOT 替换为你的 kmpkg 安装路径):
cmake -B build -S . -DCMAKE_TOOLCHAIN_FILE=$KMPKG_ROOT/scripts/buildsystems/kmpkg.cmake
cmake --build build
运行程序,输出应如下所示:
{
"name": "demo"
}