时间线
CMake 是为美国国家医学图书馆 (NLM) 的 Insight Toolkit 项目 创建的
- NLM 委托 Kitware 与三家商业公司和三所大学组成团队,创建一个用于医学数据分割和配准的开源 C++ 工具包。Kitware 因 VTK 的成功而获得此项目。
- 合同允许创新,仅规定 C++ 工具包必须可移植到 Unix、Windows 和 Mac。在 GE Research 使用 autotools 和 gmake 十年后,Bill Hoffman 认为需要一种新的 C++ 构建工具。该工具有一些基本规则
- 支持原生构建工具,如 Visual Studio IDE
- 一个输入文件即可在所有支持的平台上构建
- 仅依赖 C++ 编译器,以便于在新系统上移植和引导
- 支持代码生成器,以便可以使用工具将 C++ 封装到其他语言中。
在成功将 CMake 用于 ITK 之后,CMake 接着取代了 VTK 和 ParaView 中的构建系统。
- VTK 和 ParaView 采用 CMake 后,吸引了来自国家实验室(包括洛斯阿拉莫斯、桑迪亚和利弗莫尔)的合作者和资金流。
《精通 CMake:跨平台构建系统》由 Ken Martin 和 Bill Hoffman 编写(该书现已开源);CMake 在 《Dr. Dobb’s Journal of Software Tools》 和 《Linux Journal》 中被重点介绍。
CMake 从国家医学影像计算联盟 (NA-MIC) 获得了大量的开发资金。
- 渐渐地,CMake 开始被其他开源项目采用。
- KDE 开发者 Alexander Neundorf 是帮助 KDE 采用 CMake 的功臣。
- Kitware 努力在短短几周内创建了一个原型构建系统。
- 与之前使用的 scons 系统相比,CMake 能够更快地构建更多 KDE 组件。
- 借助 CMake,KDE 能够非常快速地将应用程序移植到 Windows 和 Apple。
- CMake 获得了一些新功能,包括共享库版本控制和安装 rpath 重写,而无需重新链接。
- 为了支持 KDE,所有主要的 Linux 发行版都发布了 CMake。
《小型组织中开发软件的开源方法》由 Ken Martin 和 Bill Hoffman 撰写,并发表在 IEEE Software Journal 上
LLVM 编译器的第一个 CMakeLists.txt
ExternalProject 被添加到 CMake,由 ARL 资助
ninja 生成器被添加到 CMake
《现代 CMake》由 Stephen Kelly 编写
- 全面的使用要求(由 Stephen Kelly 的《现代 CMake》发起)允许项目以一种友好的方式打包“如何使用我”(例如,VTK 在 2019 年重写构建系统以“到处”使用它们)。
LLVM 切换到 CMake,移除了 autoconf
Microsoft Visual Studio 为 CMake 项目引入了 集成支持
《Professional CMake: A Practical Guide》由 Craig Scott 编写
CMake 预设被整合到 Microsoft Visual Studio 中;ninja 多配置被添加到 CMake 中;正在进行的项目开始将 C++ 20 模块添加到 CMake 中,并获得 Bloomberg 的支持
在 Bryce Adelstein Lelbach 的 C++Now 会议演讲“C++ 标准库中应该包含什么?”中,CMake 被称为标准构建系统。
- Bryce 还担任标准 C++ 库演进组的主席。他的演讲指出,我们实际上已经有了一个标准构建系统!那就是 CMake。
CMake 推动了编译器描述 C++20 模块依赖信息的标准格式。p1689 已由 Visual Studio、Clang 和 GCC 实现,并被 CMake 用于支持构建 C++ 20 模块。