跳到主要内容

kmpkg 概述

kmpkg 是一个务实的 C/C++ 包与构建生态系统,其设计源于长期、生产级别的 C++ 工程实践经验。

该项目始于2018年,源于现实世界中大型C++开发的需求——在这种场景下,构建可重复性、二进制管理和部署一致性远比理论上的完备性更为重要。随着时间推移,我们深入评估了多个现有包管理器,包括cget、Conan、Conda和vcpkg。这些工具各自解决部分问题,但均未能形成适合长期运行的简洁、生产友好型系统。

在kmpkg之前,我们曾开发内部工具carbin探索二进制中心化包工作流。该项目的经验积累催生了kmpkg——它汲取了vcpkg整体架构的精髓,同时对核心设计理念进行了有意识的重构。

与vcpkg不同,kmpkg将镜像与分发控制视为核心概念。镜像被提升至系统顶层,使kmpkg在受限网络、私有基础设施及企业生产环境中显著易于操作。该设计优先考虑灵活性、确定性与操作简易性,而非集中化或不透明的假设。

kmpkg 同时汲取了 Go modulesRust Cargo 的依赖管理及版本控制理念,但始终立足于 C++ 的现实需求:异构构建系统、漫长编译周期、二进制复用及复杂工具链

kmpkg 并非“仅是包管理器”,而是旨在与周边工具链(如 kmcmakekmdo)自然融合 ——形成统一工作流,将项目生成、依赖管理、构建配置、二进制发布及版本管理视为整体系统而非孤立工具。

关于具体操作细节,kmdo提供kmpkg相关命令用于克隆、合并及发布软件包与镜像。详见**kmdo文档**获取更多信息。

关于kmpkg设计目标与权衡的深度探讨,请参阅**为何选择kmpkg**。

通过DeepL.com(免费版)翻译

开始使用

首先,请参考我们的快速入门指南。

无论您使用的是 CMake、MSBuild 还是其他构建系统,kmpkg 都能满足您的需求:

您也可使用任意编辑器:

若所需库未收录于 kmpkg 注册库,请在 GitHub 仓库提交问题自行贡献包

安装并运行 kmpkg 后,您可能希望为终端添加标签补全功能

通过DeepL.com(免费版)翻译

使用 kmpkg

创建项目依赖清单

控制台 kmpkg new --application kmpkg add port fmt


或 [通过命令行安装软件包](consede/classic-mode.md):

控制台
kmpkg install fmt

然后使用 CMake, MSBuildother build systems

运行 kmpkg help 可获得所有可用命令的简短说明。 运行 kmpkg help [topic] 可获取特定主题的详细信息。

主要功能

kmpkg 为您的软件包管理需求提供了强大的功能:

  • 轻松与构建系统集成](concepts/build-system-integration.md)
  • 控制依赖包的版本](users/versioning.md)
  • 打包并发布自己的软件包](concepts/registries.md)
  • 重用你的二进制工件](users/binarycaching.md)
  • 使用资产缓存启用离线场景](concepts/asset-caching.md)

投稿

kmpkg 是一个开源项目,因此需要您的贡献。以下 是您可以做出贡献的一些方式:

更多详情请参考我们的 mantainer guidepackaging tutorial

本项目采用了 [Microsoft Open Source Code of Conduct][contributing:coc]。欲了解更多信息,请参阅[行为准则 FAQ][contributing:coc-faq],或发送电子邮件至 kumo.pub@outlook.com 提出任何其他 问题或意见。

资源

许可证

本软件源中的代码采用 MIT 许可。由 ports 提供的库 根据其原作者的条款授权。如果 可用, kmpkg 会将相关的许可证放在 installed/<triplet>/share/<port>/copyright

安全性

kmpkg 中的大多数 port 都会使用这些库的原始开发者所偏好的原始联编 系统来联编这些库, 并从它们的官方发布位置下载 源代码和联编工具。要在防火墙后使用 ,所需的具体访问权限将取决于 正在安装的端口。如果必须在 "空气隔离 "环境中安装,可考虑在非 "空气隔离 "环境中安装一次 ,并填充一个与其他 "空气隔离 " 环境共享的asset cache

遥测

kmpkg 会收集使用数据,以帮助我们改善您的使用体验。微软收集的数据是匿名的。您可以通过以下方式退出遥测:

  • 使用 -disableMetrics 运行 bootstrap-kmpkg 脚本
  • 在命令行中将 --disable-metrics 传递给 kmpkg
  • 设置 KMPKG_DISABLE_METRICS 环境变量

有关 kmpkg telemetry 的更多信息,请访问 https://pub.kumose.cc/kmpkg/about/privacy