This is an abbreviated version of the CMake changlog with just the highlights for authors. Names for each release are arbitrarily picked by the author.
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.
* New documentation
* INTERFACE libraries
* Project VERSION support
* Exporting build trees easily
* Bracket arguments and comments available (not widely used)
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.
* C++11 Support
* Compile features support
* Sources can be added later with `target_sources`
* Better support for generator expressions and INTERFACE targets
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.
*`IN_LIST` added to `if`
*`*_INCLUDE_WHAT_YOU_USE` property added
*`COMPILE_LANGUAGE` generator expression (limited support in some generators)
This release adds lots of useful tools, support for the Swift language, and the usual improvements. It also started supporting compiler launchers, like CCache.
* Added `Swift` language
* Added `BASE_DIR` to `get_filename_component`
*`if(TEST ...)` added
*`string(APPEND ...)` added
*`CMAKE_*_COMPILER_LAUNCHER` added for make and ninja
*`TARGET_MESSAGES` allow makefiles to print messages after target is completed
* Imported targets are beginning to show up in the official `Find*.cmake` files
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`.
*`EXCLUDE_FROM_ALL` for install
*`list(FILTER` added
*`CMAKE_*_STANDARD_INCLUDE_DIRECTORIES` and `CMAKE_*_STANDARD_LIBRARIES` added for toolchains
* Try-compile improvements
*`*_CLANG_TIDY` property added
* External projects can now be shallow clones, and other improvements
You can now cross-compile to Android. Useful new if statement options really help clarify code. And the new server mode should (eventually?) improve integration with IDEs. Support for the VIM editor was also improved.
*`PARSE_ARGV` mode for `cmake_parse_arguments`
* Better 32-bit support on 64-bit machines
* Lots of useful new if comparisons, like `VERSION_GREATER_EQUAL` (really, why did it take this long?)
*`LINK_WHAT_YOU_USE` added
* Lots of custom properties related to files and directories
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+!
* Native support for C# as a language
* Native support for CUDA as a language
* Meta features cxx_std_11 (and 14, 17) added
*`try_compile` has better language support
*`BUILD_RPATH` property added
*`COMPILE_FLAGS` now supports generator expression
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.
* CUDA supported for Windows
* Better object library support in several situations
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.
* 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.