What’s new in CMake#
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.
CMake in development: WIP#
Nothing to report yet.
CMake 4.2: Emscripten#
This version adds native Emscripten cross-compile support. There are lots of
other smallish improvements too, like matching-case version variables from
find_package, controls for object files, direct cache manipulation, and more.
Initially released Nov 19, 2025
File API updates (version 2.9), with more info on imported/interface targets
Visual Studio 18 2026 added (14 2015 deprecated)
Cross-compile support for Emscripten (WebAssembly)
cmake -E copy_if_newer(and directory version) addedset(CACHE{<variable>}(andunset) were added to directly manipulate the cachestring(REGEX QUOTE)added (likere.escapein Python)New properties include
OBJECT_NAMEandINSTALL_OBJECT_*to control generated object filesMatching case
<PackageName>_VERSIONvariables added to all find modulesNumPy no longer depends on Development.Module (CMP201)
ExternalProject can set environment variables
CMake 4.1: Bits of polish#
This version improves the pkg-config integration, OPTIONAL for find commands, and other small changes. This release seemed to be focused on polishing up some edge cases.
Initially released August 5, 2025
cmake_pkg_confignow supportsIMPORTandPOPULATE.Some configure log improvements related to find commands.
CMAKE_FIND_REQUIREDadded, along with new OPTIONAL keywords for all find commands.CMAKE_<LANG>_COMPILER_ARCHITECTURE_IDnow public, and filled in for most compilers.NVIDIA support added to FindBLAS and FindLAPACK
FindPython modules now enforce consistency when cross-compiling (CMP0190)
Some GNUInstallDirs changes gated by CMP0192 and CMP0193
CMake 4.0: Out with the old#
This version removes support for setting the CMake policy below 3.5. This means
cmake_minimum_required(VERSION 3.4) is now an error, but
cmake_minimum_required(VERSION 3.4...3.15), for example, is fine. Setting
this below 3.10 has been a warning for quite some time now. You can use
CMAKE_POLICY_VERSION_MINIMUM to work around third-party libraries that
haven’t updated.
Initially released March 27, 2025
A new
CMAKE_POLICY_VERSION_MINIMUMvariable to build old projects (support for <3.5 removed)Added a flag (
--project-file) to control theCMakeLists.txtfilename (for development only)Some new linker features, like
LINKER:prefix andCMAKE_LINK_WARNING_AS_ERRORYou can set the debugger working directory for targets
FindPython can be run multiple times in a directory using new
Python_ARTIFACTS_PREFIXGenerator expressions can convert to
NATIVE_PATHVisual Studio generators 2015/2017 work like the later ones now with platform selection
macOS SDK selection simplified and less automatic
CMake 3.31: Better workflow presets#
This release adds a collection of small features and additions, along with some experimental new technology. Some updates to presets, including a new shorter command for workflow presents.
Initially released November 6, 2024
LFortan now supported
$commentsupported in preset filescmake -LR <regex>to search the cachecmake --workflow <name>now supported (one less argument)codegentarget andCODEGENinadd_custom_commandAdded
cmake_pkg_configcommand to extract values from pkg-config files.CMAKE_HOST_EXECUTABLE_SUFFIXwas addedBetter CUDA support, including getting the host compiler and OpenMP
Support for CMake 3.10 and older deprecated
Lots of smaller tweaks and cleanup
Experimental CPS (common package specification) support
CMake 3.30: C++26#
This release adds C++26 support and a way to get the latest supported standard for a compiler. This release makes a lot of small changes not listed below, like better TLS support, some generator expression updates, and some schema updates.
Initially released July 2, 2024
A
$<QUOTE>generator expression was added to produce"C++26 compile features support fully implemented (partial since 3.25)
CMAKE_<LANG>_STANDARD_LATESTholds the latest standard the current compiler supportsFree-threaded Python 3.13+ support (3.30.3+ best)
Better support (new variables and targets) for Windows Python debug builds, and
DEBUG_POSTFIXnow added bypython_add_libraryFindBoost removed
Visual Studio 2008 support removed
CMake 3.29: Build before testing#
Finally you can make the test target depend on ALL, meaning cmake --build build -t test will rebuild as needed! You have to opt-into this, though, by
setting CMAKE_SKIP_TEST_ALL_DEPENDENCY to false. Several improvements were
made for scripting, linker selection, and support was improved for various
compiler combinations on Windows.
Initially released March 21, 2024
Linker selection option (
CMAKE_LINKER_TYPE/LINKER_TYPE)CMAKE_INSTALL_PREFIXcan now be initialized by a matching environment variableIf commands to check file permissions
Select launcher for tests (
CMAKE_TEST_LAUNCHER/TEST_LAUNCHER)You can now make tests depend on
allwithCMAKE_SKIP_TEST_ALL_DEPENDENCYset toFALSE!cmake_language(EXIT)for scripts with exit codesSelect Intel OneAPI Fortran compiler with Visual Studio
Compile CUDA on Windows with Clang
CMake 3.28: C++20 modules#
This release adds C++ module
support. This does not include C++23’s import std, but is exciting step
forward for this landmark C++20 feature. These will be scanned by default if
using C++20+ and a new enough compiler and valid generator and if you have a
CMake minimum or maximum that includes CMake 3.28.
Initially released December 6, 2023
C++20 named modules supported by Ninja 1.11+ and MSVC 17.4+.
HIPsupported for NVIDIA.Apple’s VisionOS added.
CMAKE_CROSSCOMPILING_EMULATORenvironment variable added.Get/set properties TEST supports other DIRECTORY’s
Some support for job servers added
Support for passing variables to pkg-config
Generator expressions now support short-circuting
CMake 3.27: Debugger#
This release adds the new CMake debugger! This should improve support for debugging your CMake code in something like VSCode. This release also “removes” FindPythonLibs/FindPythonInterp/FindCUDA; if the min or max version is set to 3.27 or higher, the modules will be missing.
Initially released July 19, 2023
C++ Modules extensions (
.ccm,.cxxm,.c++m) are treated as C++COMPILE_ONLY,LIST, andPATHgenerator expressions added, along with a few more specific ones.New
SKIP_LINTING, as well as more generator expression support in things like<LANG>_CPPCHECK, etc.find_packagenow searches for uppercase<PACKAGENAME>_ROOTCMake/Environment variables.Added
add_custom_command(... DEPENDS_EXPLICIT_ONLY& variable for Ninja dependency control.CMake build verbose now prints the working dir and command line used to build.
Better support for versions of MSVC.
Several new CUDA properties related to targeting .
cubin/.fatbin/.optixir.Setting
cmake_minimum_requiredless than 3.5 is now deprecated.FindCUDA simi-removed, use CUDA language and FindCUDAToolkit.
FindPythonLibs & FindPythonInterp simi-removed, use FindPython.
CMake 3.26: Logging & Python#
Two important additions for FindPython, PyPy SOABI support & LimitedAPI/StableABI support, really enhance FindPython’s use. There are quite
a few nice fixes and new warnings, such as if you reverse the order of project() and cmake_minimium_required(). Logging has been moved
from CMakeOutput.log and CMakeError.log to a new CMakeConfigureLog.yaml log.
Initially released March 14, 2023
FindPython generates the correct PyPy SOABI (finally!)
FindPython supports LimitedAPI/StableABI with a new flag.
CMake has a new YAML log of configure time checks in the output directory (also
message(CONFIGURE_LOG ...)).ASM_MARMASMlanguage added for Microsoft ARM assembler.CMAKE_VS_VERSION_BUILD_NUMBERadded for the VS version number.USE_FOLDERSis on by default"<LANG>_CLANG_TIDY_EXPORT_FIXES_DIR"for clang-tidy suggested fix output.CMake’s copy CLI tool supports updates only if different
target_compile_optionsnow come aftertarget_compile_features/CMAKE_<LANG>_STANDARD
CMake 3.25: Blocks and SYSTEM#
CMake has new block scoping commands selectively controlling variables and
policies. It also has a lot more control over SYSTEM. The functional features
of CMake introduced a few releases ago are now usable in find_ commands with
VALIDATOR. Workflows got an upgrade, too.
Initially released November 16, 2022
C++26 support
LTO for CUDA with nvcc
Workflow presets added, package presets too.
SYSTEMadded toadd_subdirectory,FetchContent, and as a directory property.block()/endblock()for policy/variable scopes, alsoPROPOGATEinreturn()BSD&LINUXvariables addedVALIDATORfunction forfind_*commands.Several improvements to
try_*commands.SYSTEMtarget/directory property andEXPORT_NO_SYSTEMadded, also for FetchContent.
CMake 3.24: Package Finder#
This is a fantastic release. Package writers are getting integration between
find_package and FetchContent that will allow “download if missing”
workflows, and is configurable by packagers. Similarly, warnings as errors can
be set by a package and removed by packagers, as well (still make sure not to
do this unless you are being build as the main project!).
Initially released August 4, 2022
--freshoption removes the old cache when running.find_packageandFetchContentnow have integration - you have options to download missing dependencies.find_packagehas a newGLOBALoption.CMAKE_PROJECT_TOP_LEVEL_INCLUDESallows a user (like packagers) to inject pre-project code.PATHmanagement for generator expressions.CMAKE_COLOR_DIAGNOSTICSenv var & variable added, replacingCMAKE_COLOR_MAKEFILE.You can disable
find_*searching the install prefix.COMPILE_WARNING_AS_ERRORproperty andCMAKE_variable, and--compile-no-warning-as-errorto disable it.CUDA supports
nativeto compile for the current GPUs detected.SYSTEMincludes now are respected on MSVC generators.Better support for MSVC, XCode, and others.
LLVMFlangcompiler support.
CMake 3.23: Header only libraries#
A solid release focused on header only libraries, more user control, CMake
presets, and better CUDA support. There are some powerful new features for
header only libraries, like the various *_SETS target properties. There are
new controls like the ability to restrict paths for find_ commands and the
ability to remove SYSTEM from an existing target. You also get expanded
debugging features, and the ability to force all links to be to targets.
Presets can include other files. CUDA and C# received new updates, and a
couple of compilers were added.
Initially released March 29, 2022
CMake presets are a bit nicer, with the ability to include other files.
A couple of new supported compilers, and better C# support.
FILE_SETforinstallandtarget_sourcesheader-only source files.<INTERFACE_>HEADER_SETS,<INTERFACE_>HEADER_DIRSfor target headers.CUDA_ARCHITECTURESsupport for all and all-major.DEBUG messages from can be enabled for
find_*or find modules.define_property()has a handyINITIALIZE_FROM_VARIABLEoption.CMAKE_<SYSTEM_>IGNORE_PREFIX_PATHto controlfind_*commands.<CMAKE_>LINK_LIBRARIES_ONLY_TARGETSadded to force only targets linked (nice for finding mistakes!).IMPORTED_NO_SYSTEM, a new property to forcibly remove SYSTEM from a target.FindGTestnow adds aGMocktarget if found.
CMake 3.22: Handy env vars#
A smaller release with some nice improvements all around focused on supporting
common build situations. You can finally set CMAKE_BUILD_TYPE in your
environment to set a default build type. There are several other new env vars
and variables too. Compiler flags related to standards have been improved.
cmake_host_system_information got improved further (from 3.10) with OS
information.
Initially released November 18, 2021
New environment variables for defaults,
CMAKE_BUILD_TYPEandCMAKE_CONFIGURATION_TYPESNew environment variable
CMAKE_INSTALL_MODEfor install types (symlinks)New
CMAKE_REQUIRE_FIND_PACKAGE_<PackageName>variable to convert an optional find to a required oneCMAKE_<LANG>_EXTENSIONS_DEFAULTcomes from the compilerCMakeDependentOptionuses normal conditional syntax nowCTest can now modify environment variables
Some generators now use external (system) markers on includes for MSVC
CMake 3.21 : Colors#
Different message types now have different colors! There’s now a nice variable to see if you are in the top level project. Lots of continued cleanup and specialized new features, such as adding the HIP language and C17 and C23 support. Presets continue to be improved.
Initially released July 14, 2021
Preliminary support for MSVC 2022
CMAKE_<LANG>_LINKER_LAUNCHERadded for make and ninjaHIP added as a language
C17 and C23 support added
--install-prefix <dir>and--toolchain <file>added when running CMakeMessages printed are colored by message type!
Support for MSYS, including
FindMsysThe
file(command got several updates, includingEXPAND_TILDESupport for runtime dependencies and artifacts added to
installPROJECT_IS_TOP_LEVELand<PROJECT-NAME>_IS_TOP_LEVELfinally addedCaching improvements for the
find_commands
CMake 3.20 : Docs#
The CMake docs received a major boost in productivity by adding “new in” tags
to quickly see what was added without having to toggle documentation versions!
C++ 23 support added. Source files must have the extension listed now, and
LANGUAGE is always respected. Quite a bit of cleanup was done; make sure your
code is tested with ...3.20 before deploying that as your maximum. Presets
continue to be improved.
Initially released March 23, 2021
Support added for C++23
CUDAARCHS environment variable for setting CUDA architectures
The new
IntelLLVMcompilers are now supported (OneAPI 2021.1), andNVHPCNVIDIA HPC SDK, as wellSome expanded generator expression support in custom commands/targets, install renaming
New
cmake_pathcommand for working with pathstry_runnow has aWORKING_DIRECTORYMore features for the
file(GENERATEcommandSeveral removals, like
cmake-server,WriteCompilerDetectionHeader(if policy set to 3.20+), and a few things that have newer methods now.Source files must include the extension
CMake 3.19 : Presets#
You can now add presets in JSON form, and users will get the preset default.
find_package can now take a version range, and some specialty find modules,
like FindPython, have custom support for it. A lot of new controls were added
for permissions. Further support for generator expressions in more places.
Initially released November 18, 2020
New CMake presets files now supported - you can set defaults for your project per generator, or you can make User presets. PSA: Please add
CMakeUserPresets.jsonto your.gitignore, even if you do not useCMakePresets.json.CMake now uses the new build system introduced in XCode 12+
MSVC for Android now supported
cmake -E create_hardlinkwas addedadd_testfinally properly supports whitespace in test namesYou can now
DEFERcmake_languageto run at the end of the directory processingLots of new
fileoptions, like temporary downloads andCOMPRESSION_LEVELforARCHIVE_CREATEfind_packagesupports a version rangeDIRECTORYcan now include a binary directory in property commandsNew
JSONcommands forstringNew
OPTIMIZE_DEPENDENCIESproperty andCMAKE_*variable for smartly dropping dependencies of static and object libraries.PCH support expanded with
PCH_INSTANTIATE_TEMPLATESproperty andCMAKE_*variable.Check modules have been expanded with
CUDAandISPClanguagesFindPython:
Python*_LINK_OPTIONSaddedcompute-sanitizerfor ctest now supports CUDA for memcheck
CMake 3.18 : CUDA with Clang & CMake macro language#
CUDA now supports Clang (without separable compilation). A new
CUDA_ARCHITECTURES property was implemented to better support targeting CUDA
hardware. A new cmake_language command supports calling cmake commands and
expressions from strings. Lots of other meta changes that could make new
designs available; calling functions by variable, evaluating arbitrary CMake by
string, and configure files directly from strings. Many other nice tiny
features and papercut fixes are sprinkled throughout, a small selection is below.
Initially released July 15, 2020
cmakecancatfiles together nowNew profiling mode for
cmakecmake_languagewithCALLandEVALexportrequiresAPPENDif used multiple times (in CMake language level 3.18+)You can archive directly from
file()file(CONFIGUREis a nicer form ofconfigure_fileif you already have a string to produceOther
find_*commands gainfind_package’sREQUIREDflagNATURALsorting inlist(SORTaddedMore options for handling properties with DIRECTORY scope
CUDA_ARCHITECTURESwas addedNew
LINK_LANGUAGEgenerator expressions (DEVICE/HOSTversions too)Source can be a subdirectory for
FetchContent
CMake 3.17 : More CUDA#
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
CUDA_RUNTIME_LIBRARYcan finally be set to Shared!FindCUDAToolkit finally added
cmake -E rmreplaces older remove commandsCUDA has meta features like
cuda_std_03, etc.You can track the searches for packages with
--debug-findExternalProject 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
Added support for Objective C and Objective C++ languages
Support for precompiling headers, with
target_precompile_headersSupport for “Unity” or “Jumbo” builds (merging source files) with
CMAKE_UNITY_BUILDCTest: 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
CMAKE_GENERATORenvironment variable added to control default generatorMultiple target support in build mode,
cmake . --build --target a bShortcut
-tfor--targetInstall support,
cmake . --install, does not invoke the build systemSupport for
--loglevelandNOTICE,VERBOSE,DEBUG, andTRACEformessageThe
listcommand gainedPREPEND,POP_FRONT, andPOP_BACKexecute_processgainedCOMMAND_ECHOoption (CMAKE_EXECUTE_PROCESS_COMMAND_ECHO) allows you to automatically echo commands before running themSeveral Ninja improvements, include SWIFT language support
Compiler and list improvements to generator expressions
CMake 3.14 : File utilities (AKA CMake π)#
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
The cmake
--buildcommand gained-v/--verbose, to use verbose builds if your build tool supports itThe FILE command gained
CREATE_LINK,READ_SYMLINK, andSIZEget_filename_componentgainedLAST_EXTandNAME_WLEto access just the last extension on a file, which would get.zipon a file such asversion.1.2.zip(very handy!)You can see if a variable is defined in the CACHE with
DEFINED CACHE{VAR}in anifstatement.BUILD_RPATH_USE_ORIGINand 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
New
ctest --progressoption for live outputtarget_link_optionsandadd_link_optionsaddedtarget_link_directoriesaddedSymbolic link creation,
-E create_symlink, supported on WindowsIPO supported on Windows
You can use
-Sand-Bfor source and build directoriestarget_link_librariesandinstallwork outside the current target directorySTATIC_LIBRARY_OPTIONSproperty addedtarget_sourcesis now relative to the current source directory (CMP0076)If you use Xcode, you now can experimentally set schema fields
CMake 3.12 : Version ranges and CONFIGURE_DEPENDS#
Very powerful release, containing lots of smaller long-requested features. One of the smaller
but immediately noticeable changes is the addition of version ranges;
you can now set both the minimum and maximum known CMake version easily. You can also set
CONFIGURE_DEPENDS on a GLOBed set of files, and the build system will check those files and
rerun if needed! You can use the general PackageName_ROOT
for all find_package searches. Lots of additions to strings and lists, module updates,
shiny new Python find module (2 and 3 versions too), and many more.
Initially released July 17, 2018
Support for
cmake_minimum_requiredranges (backward compatible)Support for
-j,--parallelin--buildmode (passed on to build tool)Support for
SHELL:strings in compile options (not deduplicated)New FindPython module
string(JOINandlist(JOIN, andlist(TRANSFORMfile(TOUCHandfile(GLOB CONFIGURE_DEPENDSC++20 support
CUDA as a language improvements: CUDA 7 and 7.5 now supported
Support for OpenMP on macOS (command line only)
Several new properties and property initializers
CPack finally reads
CMAKE_PROJECT_VERSIONvariables
CMake 3.11 : Faster & IMPORTED INTERFACE#
This release is supposed to be much faster. You can also finally directly add INTERFACE targets
to IMPORTED libraries (the internal Find*.cmake scripts should become much cleaner eventually).
Initially released March 28, 2018
Fortran supports compiler launchers
Xcode and Visual Studio support
COMPILE_LANGUAGEgenerator expressions finallyYou can now add INTERFACE targets directly to IMPORTED INTERFACE libraries (Wow!)
Source file properties have been expanded
FetchContentmodule now allows downloads to happen at configure time (Wow)
CMake 3.10 : CppCheck#
CMake now is built with C++11 compilers. Lots of useful improvements help write cleaner code.
Initially released November 20, 2017
Support for flang Fortran compiler
Compiler launcher added to CUDA
Indented
#cmakedefinesnow supported forconfigure_fileinclude_guard()added to ensure a file gets included only oncestring(PREPENDadded*_CPPCHECKproperty addedLABELSadded to directoriesFindMPI vastly expanded
FindOpenMP improved
Dynamic test discovery for
GoogleTestcmake_host_system_informationcan access much more information.
CMake 3.9 : IPO#
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.
Initially released July 18, 2017
CUDA supported for Windows
Better object library support in several situations
DESCRIPTIONadded toprojectseparate_argumentsgetsNATIVE_COMMANDINTERPROCEDURAL_OPTIMIZATIONenforced (andCMAKE_*initializer added, CheckIPOSupported added, Clang and GCC support)New
GoogleTestmoduleFindDoxygendrastically improved
CMake 3.8 : C# & CUDA#
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+!
Initially released April 10, 2017
Native support for C# as a language
Native support for CUDA as a language
Meta features cxx_std_11 (and 14, 17) added
try_compilehas better language supportBUILD_RPATHproperty addedCOMPILE_FLAGSnow supports generator expression*_CPPLINTadded$<IF:cond,true-value,false-value>added (wow!)source_group(TREEadded (finally allowing IDEs to reflect the project folder structure!)
CMake 3.7 : Android & CMake Server#
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.
Initially released November 11, 2016
PARSE_ARGVmode forcmake_parse_argumentsBetter 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_USEaddedLots of custom properties related to files and directories
CMake Server added
Added
--trace-source="filename"to monitor certain files only
CMake 3.6 : Clang-Tidy#
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.
Initially released July 7, 2016
EXCLUDE_FROM_ALLfor installlist(FILTERaddedCMAKE_*_STANDARD_INCLUDE_DIRECTORIESandCMAKE_*_STANDARD_LIBRARIESadded for toolchainsTry-compile improvements
*_CLANG_TIDYproperty addedExternal projects can now be shallow clones, and other improvements
CMake 3.5 : ARM#
This release expanded CMake to more platforms, and make warnings easier to control from the command line.
Initially released March 8, 2016
Multiple input files supported for several of the
cmake -Ecommands.cmake_parse_argumentsnow builtinBoost, GTest, and more now support imported targets
ARMCC now supported, better support for iOS
XCode backslash fix
CMake 3.4 : Swift & CCache#
This release adds lots of useful tools, support for the Swift language, and the usual improvements. It also started supporting compiler launchers, like CCache.
Initially released November 12, 2015
Added
SwiftlanguageAdded
BASE_DIRtoget_filename_componentif(TEST ...)addedstring(APPEND ...)addedCMAKE_*_COMPILER_LAUNCHERadded for make and ninjaTARGET_MESSAGESallow makefiles to print messages after target is completedImported targets are beginning to show up in the official
Find*.cmakefiles
CMake 3.3 : if IN_LIST#
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.
Initially released July 23, 2015
IN_LISTadded toif*_INCLUDE_WHAT_YOU_USEproperty addedCOMPILE_LANGUAGEgenerator expression (limited support in some generators)
CMake 3.2 : UTF8#
This is a smaller release, with mostly small features and fixes. Internal changes, like better Windows and UTF8 support, were the focus.
Initially released March 11, 2015
continue()inside loopsFile and directory locks added
CMake 3.1 : C++11 and compile features#
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
C++11 Support
Compile features support
Sources can be added later with
target_sourcesBetter 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
New documentation
INTERFACE libraries
Project VERSION support
Exporting build trees easily
Bracket arguments and comments available (not widely used)
Lots of improvements