This is an abbreviated version of the CMake changelog with just the highlights for authors. Names for each release are arbitrarily picked by the author.
- Initially released [November 18, 2020](https://blog.kitware.com/cmake-3-19-0-available-for-download/)
- New [CMake presets files](https://cmake.org/cmake/help/latest/manual/cmake-presets.7.html) now supported - you can set defaults for your project per generator, or you can make User presets. PSA: Please add `CMakeUserPresets.json` to your `.gitignore`, even if you do not use `CMakePresets.json`.
- CMake now uses the new build system introduced in XCode 12+
- MSVC for Android now supported
-`cmake -E create_hardlink` was added
-`add_test` finally properly supports whitespace in test names
- You can now `DEFER``cmake_language` to run at the end of the directory processing
- Lots of new `file` options, like temporary downloads and `COMPRESSION_LEVEL` for `ARCHIVE_CREATE`
-`find_package` supports a version range
-`DIRECTORY` can now include a binary directory in property commands
- New `JSON` commands for `string`
- New `OPTIMIZE_DEPENDENCIES` property and `CMAKE_*` variable for smartly dropping dependencies of static and object libraries.
- PCH support expanded with `PCH_INSTANTIATE_TEMPLATES` property and `CMAKE_*` variable.
- Check modules have been expanded with `CUDA` and `ISPC` languages
- FindPython: `Python*_LINK_OPTIONS` added
-`compute-sanitizer` for ctest now supports CUDA for memcheck
A FindCUDAToolkit was finally added, which allows finding and using the CUDA
toolkit without enabling the CUDA language! CUDA now is a bit more configurable,
such as linking to shared libraries. Quite a bit more polish in the expected areas,
as well, like FindPython. Finally, you can now iterate over multiple lists at a time.
- Initially released [March 20, 2020](https://blog.kitware.com/cmake-3-17-0-available-for-download/)
-`CUDA_RUNTIME_LIBRARY` can finally be set to Shared!
- FindCUDAToolkit finally added
-`cmake -E rm` replaces older remove commands
- CUDA has meta features like `cuda_std_03`, etc.
- You can track the searches for packages with `--debug-find`
- ExternalProject can now disable recursive checkouts
- FindPython better integration with Conda
- DEPRECATION can be applied to targets
- CMake gained a rm command
- Several new environment variables
- foreach can now do `ZIP_LISTS` (multiple lists at a time)
## [CMake 3.16][] : Unity builds
A new unity build mode was added, allowing source files to be merged into a single build file. Support for
precompiled headers (possibly preparing for C++20 modules, perhaps?) was added. Lots of other smaller
fixes were implemented, especially to newer features, such as to FindPython, FindDoxygen, and others.
- Initially released [November 26, 2019](https://blog.kitware.com/cmake-3-16-0-available-for-download/)
- Added support for Objective C and Objective C++ languages
- Support for precompiling headers, with `target_precompile_headers`
- Support for "Unity" or "Jumbo" builds (merging source files) with «variable:CMAKE_UNITY_BUILD»
- CTest: Can now skip based on regex, expand lists
- Several new features to control RPath.
- Generator expressions work in more places, like build and install paths
- Find locations can now be explicitly controlled through new variables
## [CMake 3.15][] : CLI upgrade
This release has many smaller polishing changes, include several of improvements to the CMake command line, such as control over the default generator through environment variables (so now it's easy to change the default generator to Ninja). Multiple targets are supported in `--build` mode, and `--install` mode added. CMake finally supports multiple levels of logging. Generator expressions gained a few handy tools. The still very new FindPython module continues to improve, and FindBoost is now more inline with Boost 1.70's new CONFIG
module. `export(PACKAGE)` has drastically changed; it now no longer touches `$HOME/.cmake` by default (if CMake Minimum version is 3.15 or higher), and requires an extra step if a user wants to use it. This is generally less surprising.
- Initially released [July 17, 2019](https://blog.kitware.com/cmake-3-15-0-available-for-download/)
- «envvar:CMAKE_GENERATOR» environment variable added to control default generator
- Multiple target support in build mode, `cmake . --build --target a b`
- Shortcut `-t` for `--target`
- Install support, `cmake . --install`, does not invoke the build system
- Support for `--loglevel` and `NOTICE`, `VERBOSE`, `DEBUG`, and `TRACE` for `message`
- The «command:list» command gained `PREPEND`, `POP_FRONT`, and `POP_BACK`
- «command:execute_process» gained `COMMAND_ECHO` option («variable:CMAKE_EXECUTE_PROCESS_COMMAND_ECHO») allows you to automatically echo commands before running them
- Several Ninja improvements, include SWIFT language support
- Compiler and list improvements to generator expressions
This release has lots of small cleanups, including several utilities for files. Generator expressions work in a few more places, and list handling is better with empty variables.
Quite a few more find packages produce targets. The new Visual Studio 16 2019 generator is a bit different than older versions. Windows XP and Vista support has been dropped.
- Initially released [March 14, 2019](https://blog.kitware.com/cmake-3-14-0-available-for-download/)
- The cmake `--build` command gained `-v/--verbose`, to use verbose builds if your build tool supports it
- The FILE command gained `CREATE_LINK`, `READ_SYMLINK`, and `SIZE`
- «command:get*filename_component» gained `LAST_EXT` and `NAME_WLE` to access just the \_last* extension on a file, which would get `.zip` on a file such as `version.1.2.zip` (very handy!)
- You can see if a variable is defined in the CACHE with `DEFINED CACHE{VAR}` in an «command:if» statement.
-`BUILD_RPATH_USE_ORIGIN` and CMake version were added to improve handling of RPath in the build directory.
- The CMake server mode is now being replaced with a file API, starting in this release. Will affect IDEs in the long run.
## [CMake 3.13][] : Linking control
You can now make symbolic links on Windows! Lots of new functions that fill out the
popular requests for CMake, such as `add_link_options`, `target_link_directories`, and
`target_link_options`. You can now do quite a bit more modification to targets outside
of the source directory, for better file separation. And, `target_sources`_finally_ handles relative paths properly (policy 76).
- Initially released [November 20, 2018](https://blog.kitware.com/cmake-3-13-0-available-for-download/)
- New `ctest --progress` option for live output
-`target_link_options` and `add_link_options` added
-`target_link_directories` added
- Symbolic link creation, `-E create_symlink`, supported on Windows
- IPO supported on Windows
- You can use `-S` and `-B` for source and build directories
-`target_link_libraries` and `install` work outside the current target directory
-`STATIC_LIBRARY_OPTIONS` property added
-`target_sources` is now relative to the current source directory (CMP0076)
- If you use Xcode, you now can experimentally set schema fields
Lots of fixes to CUDA support went into this release, including `PTX` support and MSVC generators. Interprocedural Optimizations are now supported properly.
Even more modules provide imported targets, including MPI.
This adds CUDA as a language, as well as `cxx_std_11` as a compiler meta-feature. The new generator expression could be really useful if you can require CMake 3.8+!
You can now cross-compile to Android. Useful new if statement options really help clarify code. And the new server mode was supposed to improve integration with IDEs (but is being replaced by a different system in CMake 3.14+). Support for the VIM editor was also improved.
This release added Clang-Tidy support, along with more utilities and improvements. It also removed the search of `$PATH` on Unix systems due to problems, instead users should use `$CMAKE_PREFIX_PATH`.
This release adds lots of useful tools, support for the Swift language, and the usual improvements. It also started supporting compiler launchers, like CCache.
This is notable for the useful `IN_LIST` option for if, but it also added better library search using `$PATH` (See CMake 3.6), dependencies for INTERFACE libraries, and several other useful improvements. The addition of a `COMPILE_LANGUAGE` generator expression would prove very useful in the future as more languages are added. Makefiles now produce better output in parallel.
This is the first release of CMake to support C++11. Combined with fixes to the new features of CMake 3.0, this is currently a common minimum version of CMake for libraries that want to support old CMake builds.
- Initially released [December 17, 2014](https://blog.kitware.com/cmake-3-1-0-released/)
- C++11 Support
- Compile features support
- Sources can be added later with `target_sources`
- Better support for generator expressions and INTERFACE targets
## [CMake 3.0][] : Interface libraries
There were a ton of additions to this version of CMake, primarily to fill out the target interface. Some bits of needed functionality were missed and implemented in CMake 3.1 instead.
- Initially released [June 10, 2014](https://blog.kitware.com/cmake-3-0-0-available-for-download/)
- New documentation
- INTERFACE libraries
- Project VERSION support
- Exporting build trees easily
- Bracket arguments and comments available (not widely used)