Submitted by release of a cross-platform open source build script generator CMake 3.17, which acts as an alternative to Autotools and is used in projects such as KDE, LLVM/Clang, MySQL, MariaDB, ReactOS, and Blender. The CMake code is written in C++ and distributed under the BSD license.
CMake is notable for providing a simple scripting language, means of extending functionality through modules, a minimum number of dependencies (no binding to M4, Perl or Python), caching support, cross-compilation tools, support for generating build files for a wide range of build systems and compilers, the presence ctest and cpack utilities to define test scripts and package builds, cmake-gui utility to interactively configure build options.
A new assembly script generator based on the Ninja toolkit has been added - “Ninja Multi-Config”, which differs from the old generator in the ability to process several assembly configurations at once.
In the assembly script generator for Visual Studio appeared the ability to define source files associated with each configuration (per-config sources).
The ability to set meta parameters for CUDA (“cuda_std_03”, “cuda_std_14”, etc.) has been added to the tools for setting compiler parameters (Compile Features).
Added variables "CMAKE_CUDA_RUNTIME_LIBRARY" and "CUDA_RUNTIME_LIBRARY" to select the type of runtime libraries when using CUDA.
Added the "FindCUDAToolkit" module to determine the CUDA toolkit available on the system without enabling the CUDA language.
Added "--debug-find" command to cmake to output additional readable diagnostics when performing search operations. For similar purposes, the CMAKE_FIND_DEBUG_MODE variable has been added.
Added support for searching for CURL tools using cmake-generated configuration files “CURLConfig.cmake” to the “FindCURL” module. To disable this behavior, the CURL_NO_CURL_CMAKE variable is provided.
The FindPython module has added the ability to search for Python components in virtual environments managed using “conda”.
The ctest utility has added the “--no-tests=[error|ignore]” options to define the behavior in the case of no tests and “--repeat” to set the conditions for re-running tests (until-pass, after-timeout).
The assembly target properties INTERFACE_LINK_OPTIONS, INTERFACE_LINK_DIRECTORIES and INTERFACE_LINK_DEPENDS are now transferred among the internal dependencies of statically assembled libraries.
When using the MinGW toolkit, the search for DLL files with the find_library command is disabled by default (instead, the default attempt is to import ".dll.a" libraries).
The logic for selecting the ninja utility in the Ninja generator now does not depend on the name of the executable file - the first ninja-build, ninja or samu utility found in the paths defined through the PATH environment variable is used.
Added a "-E rm" command to cmake that can be used to remove files and directories instead of the separate "-E remove" and "-E remove_directory" commands.