cmkr:声明式 CMake 生成以实现更清晰的 C++ 构建
通过编写单个 cmake.toml 来体验声明式构建流程,以生成标准 CMake 项目,包括目标和依赖项。Duncan Ogilvie 创建了 cmkr 作为一个实用工具,用于将 CMake 包装为类似 Cargo 的 TOML 清单,保持 CMake 兼容性,同时减少样板代码。关键功能包括 TOML 配置、自动生成 CMakeLists.txt、FetchContent 和 vcpkg 集成,以及 CI 的自引导;希望减少手动 CMake 脚本的开发者将获得最大收益。
cmkr 在实际操作中做什么?
cmkr 读取人类可读的 cmake.toml 文件,并自动生成符合习惯的 CMakeLists.txt 文件。该工具接受项目元数据、多目标定义(可执行文件、静态库和共享库)、条件逻辑和特定平台选项的 TOML,然后输出任何 CMake 兼容的 IDE 或构建步骤都可以使用的标准 CMake。这用每个项目的单一声明性清单替代了手写的 CMake 脚本。
它在 CI 和共享项目中表现如何?
cmkr 提供自引导功能,因此一个代码库可以包含生成的文件和一个引导脚本,让下游构建者仅使用标准 CMake 和 C++ 编译器进行构建。该设计意味着 CI 管道不需要预先安装 cmkr;生成的 CMake 仍然是自动构建的规范输入,使项目共享和与现有 CI 工作流的集成变得简单。
cmkr 安全吗,学习曲线有多陡峭?
该工具通过生成标准 CMakeLists.txt 来保持 CMake 兼容性,因此在构建时不会替代 CMake。条件逻辑和特定平台规则存在于 TOML 中,这需要学习 cmkr 从声明性条目到 CMake 构造的映射。开发者在 C++ 工具方面的背景和之前使用 CMake 的经验将减少上手时间;初学者从较少冗长的配置中受益,但必须学习清单模式。
对于想要声明性构建元数据的 C++ 团队的明确选择
cmkr 适合那些更喜欢编写单个 TOML 清单而不是维护多个 CMake 脚本的开发人员;它使项目与现有的 CMake 工具和 IDE 兼容,同时使存储库引导成为可能。主要的权衡是额外的抽象层:团队必须将 CMake 概念映射到声明性模式中,这增加了一个初始学习步骤,之后才能看到时间节省的效果。