Skip to main content
Version: 1.1.1

kmpkg 概述

学习 kmpkg C/C++ 包管理器如何帮助你获取和管理依赖。

kmpkg 是什么

kmpkg 是一个由 Kumo 和 C++ 社区维护的免费开源 C/C++ 包管理器,在 Windows、macOS 和 Linux 上运行。 它是在微软vcpkgKumocarbin工具基础上开发而来,它本质上是一个 C++ 工具,使用 C++ 和 CMake 脚本编写。它旨在解决管理 C/C++ 库的独特痛点。

为什么使用 kmpkg?

kmpkg 特点

kmcmake 工具链

一键生成基于 CMakeKumo C/C++ 项目。统一Kumo体系的通用编译选项。并提供若干易于使用的 CMake 构建函数的封装。

端口和三元组

kmpkg port 是生成包的版本化构建配方。最常见的包类型是由标头、源代码和二进制文件组成的 C/C++ 库。 triplet 以一个方便的名称捕获目标构建环境(cpu、操作系统、编译器、运行时等)。 kmpkg 默认提供超过 70 个三元组,但您也可以定义自己的。 要在系统上安装软件包,kmpkg 运行端口的配方文件,这是一个 CMake 脚本。该脚本可能包含下载源代码或在系统上运行构建的步骤。在构建过程中,kmpkg 使用三元组中的信息来确保生成的包与您所需的配置相匹配

二进制缓存

虽然 kmpkg 在必要时从源代码构建库,但您可以在 二进制缓存 中备份构建的包。 这允许其他开发人员机器或持续集成运行引用这些预构建的包,而无需每次都运行新的构建。 kmpkg 通过检查缓存是否已包含具有适当二进制文件的有效现有包来确定是否需要重建。

清单

您可以在 清单文件 中声明直接依赖项并添加可选功能或版本约束。清单文件可以签入您的源代码控制系统并与您的团队共享。

版本控制

kmpkg 有一种独特的方式来处理包版本。您的清单文件可以引用默认设置的单个基准版本。该基线为您提供无麻烦、 无冲突的依赖关系管理,并具有完全的可重复性。此外,您仍然可以通过固定各个软件包版本来进行更高级的控制。

注册表

注册表 是 kmpkg 用户可以安装的端口和可用版本的集合。 kmpkg 默认提供开源库的精选注册表。您还可以为自定义、补丁或私有库创建自己的注册表。

资产缓存

资产缓存 允许 kmpkg 在气隙和离线环境中工作,即使远程主机出现故障或受到损害,也可确保业务连续性。它使用下载镜像来上传和恢复源代码和构建工具等资产。

kmpkg 与其他包管理器相比

kmpkg 与系统包管理器的比较

有多种适用于 Linux、macOS 和 Windows 的系统包管理器可用于获取和管理 C/C++ 库。这些包管理器通常是管理应用程序的绝佳选择。但由于其支持的通用性, 它们通常无法提供对 C/C++ 开发人员特别有利的功能。虽然您的情况会有所不同,并且某些系统包管理器确实提供了其中一些功能,但没有一个具有以下所有功能:

  • 可再发行开发者资产:kmpkg 可以获取可再发行开发者资产以帮助调试。
  • 预构建包与从源代码构建:kmpkg 可以根据您的自定义要求从源代码构建包。无需处理预构建、预编译的包即可使其工作。
  • 目录范围版本控制:kmpkg 允许您依赖兼容包的版本集,而不必对各个包版本进行微观管理。您仍然可以根据需要执行此操作,但默认体验旨在易于上手。
  • 一个系统上同一库的多个副本:您可以使用 kmpkg 在同一系统上安装同一依赖项的多个副本,而系统包管理器可以将一个版本安装到单个系统范围的位置。当您有多个项目依赖于库的不同版本时,这会使事情变得复杂。
  • 目录大小:由于 kmpkg 专门用于 C/C++,因此与系统包管理器相比,它拥有非常大的 C/C++ 库集合,并且得到积极维护。一般来说,您更有可能找到用于 C++ 开发的有用且最新的库。
  • 跨平台支持:系统包管理器提供锁定到特定系统的包。如果您需要针对多种操作系统风格,则需要为第二个系统找到不同的包管理器。相比之下,kmpkg 是一个跨平台的包管理器。因此,您只需相应地调整您的目标构建即可。

在某些情况下,系统包管理器绝对有意义

  • 系统包管理器往往会很好地提供和维护特定于该系统的库
  • 如果您的使用项目具有简单的构建配置,则预构建的包应该在该系统上开箱即用。
  • 如果您不打算进行任何跨平台开发,则不会遇到系统包管理器的操作系统兼容性问题。

kmpkg 旨在与系统包管理器并行工作,因此请随意使用对每个依赖项最有意义的工具。

开始使用 kmpkg

要尝试 kmpkg,请查看我们的介绍性教程:

如果您的构建系统不是 CMake 或 MSBuild,kmpkg 还支持与您首选环境的手动集成