Timeline
CMake is created for the National Library of Medicine’s (NLM) Insight Toolkit Project
- NLM put Kitware on a team of three commercial companies and three universities to create an open source C++ toolkit for segmentation and registration of medical data. Kitware was awarded this because of the success of VTK.
- The contract allowed for innovation, only specifying that the C++ toolkit had to be portable to Unix, Windows, and Mac. After a decade of using autotools and gmake at GE Research, Bill Hoffman felt that a new tool for building C++ was needed. The tool had some basic rules:
- Support native build tools like the Visual Studio IDE
- One input file to build on all supported platforms
- Depend only on a C++ compiler so that it is easy to port and bootstrap on new systems
- Support for code generators so tools can be used to wrap C++ into other languages.
After successfully using CMake for ITK, CMake went on to replace the build system in VTK and ParaView.
- The adoption of CMake by VTK and ParaView brought in collaborators and funding streams from national labs, including Los Alamos, Sandia, and Livermore.
Mastering CMake: A Cross-Platform Build System was written by Ken Martin and Bill Hoffman (the book is now available open source); CMake is featured in Dr. Dobb’s Journal of Software Tools and Linux Journal.
CMake received substantial development funding from The National Alliance for Medical Image Computing (NA-MIC).
- Slowly, CMake started to be adopted by other open source projects.
- KDE developer Alexander Neundorf was the champion that helped KDE adopt CMake.
- Kitware worked hard to create a prototype build system in a few short weeks.
- CMake was able to quickly build more of KDE than the scons system they were using previously.
- KDE was able to port applications to Windows and Apple very quickly with CMake.
- CMake got new features, including shared library versioning and installation rpath re-writes without relinking.
- CMake was distributed by all major linux distributions to support KDE.
An Open Source Approach to Developing Software in a Small Organization, written by Ken Martin and Bill Hoffman, was published in the IEEE Software Journal
First CMakeLists.txt for the LLVM Compiler
ExternalProject is added to CMake ARL funded
ninja generator is added to CMake
Modern CMake is written by Stephen Kelly
- Comprehensive usage requirements, started by Stephen Kelly’s Modern CMake, allowed projects to package up “how to use me” in a nice way (cf. VTK’s build system rewrite to use them “everywhere” in 2019).
LLVM switches to CMake, removing autoconf
Microsoft Visual Studio introduces integrated support for CMake projects
Professional CMake: A Practical Guide is written by Craig Scott
CMake Presets are incorporated into Microsoft Visual Studio; ninja multi config is added to CMake; Ongoing project begins to add C++ 20 Modules to CMake with support for Bloomberg
CMake is called the standard build system by Bryce Adelstein Lelbach during his C++Now conference talk “What Belongs In The C++ Standard Library?”
- Bryce also served as the chair of the Standard C++ Library Evolution group. His talk stated that we actually have a standard build system! It’s CMake.
CMake drives the standards format for compilers to describe C++20 module dependency information. p1689 has been implemented by Visual Studio, Clang, and GCC, and is used by CMake to support the building of C++ 20 modules.
A CMake Built for You
Kitware can work with you to develop a CMake software build system that is tailored to your requirements.