CMake is an extensible, open-source system that manages the build process in an operating system and in a compiler-independent manner. Unlike many cross-platform systems, CMake is designed to be used in conjunction with the native build environment. Simple configuration files placed in each source directory (called CMakeLists.txt files) are used to generate standard build files (e.g., makefiles on Unix and projects/workspaces in Windows MSVC) which are used in the usual way. CMake can generate a native build environment that will compile source code, create libraries, generate wrappers and build executables in arbitrary combinations.
3.21.128 Jul 2021 14:25
3.21.015 Jul 2021 14:05
3.20.522 Jun 2021 19:25
Changes in 3.20.5 since 3.20.4:
Brad King (7):
gitlab-ci: update macOS jobs to use Xcode 12.5.
cmGlobalVisualStudio10Generator: Move static functions to anonymous namespace.
cmGlobalVisualStudio10Generator: Adopt GetVSInstanceVersion method.
VS: Do not apply '/external:W*' flag table mapping on VS lt; 16.10.
Tests: xcode version detection for Xcode 13 on ARM.
Help: Add 3.20 release note section for 3.20. 3,4,5 .
Craig Scott (1):
ExternalProject: Use ref 0 to avoid MSYS/Cygwin shell substitutions.
Kyle Edwards (1):
CMake: Allow override of unexpected non-flow-control commands.
3.20.415 Jun 2021 13:05
3.20.328 May 2021 16:05
Changes in 3.20.3 since 3.20.2:
Brad King (7):
Help: Use relative path for IDE Integration guide link to preset schema.
BinUtils: Use more-private temporary variable names.
ObjectiveC: Respect OSX_ARCHITECTURES for OBJC.
FindBoost: Add support for Boost 1.76.
Ninja: Restore support for Fortran in a symlinked build tree.
Utilities/Sphinx: Update man page config for Sphinx 4.
Craig Scott (2):
ExternalProject: Ensure git fetch if updating to hash we don't have yet.
ExternalProject: Only add git config setting with git 1.7.7 or later.
Kyle Edwards (2):
Ninja Multi-Config: Split long command lines by config.
CMP0082: Check EXCLUDE_FROM_ALL property at generate time.
Raul Tambre (3):
GNU: C++17 default version.
GNU: Final C++20 flags.
GNU: C++23 support.
Robert Maynard (6):
CUDA: improve regex for CUDA Toolkit root from nvcc verbose output.
cmCommandLineArgument: Correctly record parsing failures.
cmake: `--build` and `--install` error out when encountering bad flags.
cmCommandLineArgument: Provide more information syntax error messages.
NVHPC: Support explicit language flags.
NVHPC: Support Ninja dependency scanning.
3.20.230 Apr 2021 21:25
ci: pay attention to the machine load when running tests
ci: limit builds by machine load
Help: Add 3.20 release note for error on unknown arguments
gitlab-ci: equally delay all jobs on integration branches
Autogen: Restore mocs_compilation in OBJECT libraries
Help: Fix typos in cmake-compile-features(7)
Help: Do not recommend WCDH in cmake-compile-features(7)
Intel: Update Classic compiler version detection for 2021
IntelLLVM: Add special case for ifx 2021.1 version extraction
Help: Behavior of file(TO_NATIVE_PATH) depends on the host platform
Help: Document special cases for if(IS_ABSOLUTE)
Add missing 'not' in error messages
KWIML 2021-04-21 (49d91529)
autogen: fix race in depfile parsing
Ninja Multi-Config: Correctly generate POST_BUILD custom targets
BinUtils: Restore toolchain prefix detection from compiler name 'c++'
OpenBSD: Fix system feature definitions
3.7.013 Nov 2016 02:06
CMake now supports Cross Compiling for Android with simple toolchain files.
The Ninja generator learned to conditionally support Fortran when using a ninja tool that has the necessary features. See generator documentation for details.
The if() command gained new boolean comparison operations LESS_EQUAL , GREATER_EQUAL , STRLESS_EQUAL , STRGREATER_EQUAL , VERSION_LESS_EQUAL , and VERSION_GREATER_EQUAL .
The try_compile() command source file signature now honors configuration-specific flags (e.g. CMAKE__FLAGS_DEBUG ) in the generated test project. Previously only the default such flags for the current toolchain were used. See policy CMP0066 .
Toolchain files may now set CMAKE_EXE_LINKER_FLAGS_INIT , CMAKE_SHARED_LINKER_FLAGS_INIT , and CMAKE_MODULE_LINKER_FLAGS_INIT variables to initialize the CMAKE_EXE_LINKER_FLAGS , CMAKE_SHARED_LINKER_FLAGS , and CMAKE_MODULE_LINKER_FLAGS cache entries the first time a language is enabled in a build tree.
CTest now supports test fixtures through the new FIXTURES_SETUP , FIXTURES_CLEANUP and FIXTURES_REQUIRED test properties. When using regular expressions or rerun-failed to limit the tests to be run, a fixture s setup and cleanup tests will automatically be added to the execution set if any test requires that fixture.
We no longer provide Linux i386 binaries for download from cmake.org for new versions of CMake.
Vim support files cmake-indent.vim , cmake-syntax.vim , and cmake-help.vim have been removed in favor of the files now provided from the vim-cmake-syntax project.
Support for building CMake itself with some compilers was dropped:
Visual Studio 7.1 and 2005 superseded by VS 2008 and above
MinGW.org mingw32 superseded by MSYS2 mingw32 and mingw64
CMake still supports generating build systems for other projects using these compilers.
3.1.207 Feb 2015 16:25
Fix regression in default configuration selection.
Fix packaging of source tarballs with symbolic links.
KWSys Directory: Check opendir return value before using it.
Help: Clarify status of link_libraries command.
Normalize OBJECT_DEPENDS paths to match custom commands.
MSVC: Fix initialization of RelWithDebInfo shared library link flags.
Fix detection of OpenSSL 1.0.2.
Update GNU make error message matching.
3.1.018 Dec 2014 15:15
A new cmake-compile-features(7) manual was added.
The Visual Studio 14 2015 generator was added.
Generators for Visual Studio 11 (2012) and above learned to generate projects for Windows Phone and Windows Store.
The cmake-language(7) syntax for Variable References and Escape Sequences was simplified in order to allow a much faster implementation.
The if() command no longer automatically dereferences variables named in quoted or bracket arguments.
The cmake-gui(1) learned to capture output from child processes started by the execute_process() command and display it in the output window.
The cmake-language(7) internal implementation of generator expression and list expansion parsers have been optimized and shows non-trivial speedup on large projects.
The Makefile generators learned to use response files with GNU tools on Windows to pass library directories and names to the linker.
When generating linker command-lines, CMake now avoids repeating items corresponding to SHARED library targets.
Many more additions and changes.
3.0.106 Aug 2014 12:26
Several bugfixes were applied. Semicolon in AIX compiler warning FAIL_REFEX caused it to match other output.
Linking into a static library was broken for Xcode 6.
CMake build error on QNX.
Fix CMakeExpandImportedTargets to avoid Error on non-existent target in get_target_property.
cannot build targets 'test' or 'package' after bootstrapping (Brad King).
UseSWIG.cmake used wrong filenames for Python.
Fortran modules for GNU fortran were not correctly identified.
3.0.009 Jul 2014 23:59
The CMake language has been extended with *Bracket Argument* and *Bracket Comment* syntax inspired by Lua long bracket. While the CMake documentation has been converted to reStructuredText.