CMake 3.25 Release Notes¶
Contents
Changes made since CMake 3.24 include the following.
New Features¶
Presets¶
- The
cmake-presets(7)
schema version has been bumped to6
. - The
cmake-presets(7)
format now supports apackagePresets
field to specify presets forcpack --preset
. - The
cmake-presets(7)
format now supports aworkflowPresets
field to specify presets forcmake --workflow
. - The
cmake-presets(7)
format now supports anoutputJUnitFile
field to specify JUnit output in test presets.
Languages¶
- The
Compile Features
functionality is now aware of C++26, and defines acxx_std_26
meta-feature. C++26 compiler modes may also be specified via theCXX_STANDARD
,CUDA_STANDARD
,HIP_STANDARD
, orOBJCXX_STANDARD
target properties. CUDA
language support now includes device link-time optimization when usingnvcc
. TheCMAKE_INTERPROCEDURAL_OPTIMIZATION
variable and the associatedINTERPROCEDURAL_OPTIMIZATION
target property will activate device LTO.
Command-Line¶
- A
cmake --workflow --preset
mode was added to drive sequences of configure, build, test, and package operations through a single command. - The
cmake -E capabilities
command gained a newtls
field that tells whether or not TLS is enabled. - The
cmake -E env
command-line tool gained a--modify
flag to supportENVIRONMENT_MODIFICATION
operations. - The
cmake --debug-trycompile
option now prints log messages reporting the directory in which each try-compile check is done.
Compilers¶
- Support for the Tasking compiler toolsets (SmartCode, TriCore,
Standalone: ARM, MCS, 8051) was added with compiler id
Tasking
. See theCMAKE_TASKING_TOOLSET
variable.
Commands¶
- The
add_subdirectory()
command gained aSYSTEM
option to enable theSYSTEM
directory property in the subdirectory. - The
block()
andendblock()
commands were added to manage specific scopes (policy or variable) for a contained block of commands. - The
cmake_language()
command gained a newGET_MESSAGE_LOG_LEVEL
sub-command. It can be used to query the current message logging level. - The
find_file()
,find_path()
,find_library()
, andfind_program()
commands gained aVALIDATOR
option to specify a function to be called for each candidate item to validate it. - The
find_package()
command now considers paths of the form<prefix>/<name>*/(cmake|CMake)/<name>*/
when searching for package configuration files. - The
return()
command gained aPROPAGATE
option to propagate variables to the scope to which control returns. See policyCMP0140
. - The
try_compile()
andtry_run()
commands gained new signatures that more consistently use keyword dispatch and do not require a binary directory to be specified. Additionally, these signatures use a unique directory for each invocation, which allows multiple outputs to be preserved when usingcmake --debug-trycompile
. - The
try_compile()
andtry_run()
commands gained the optionNO_CACHE
to store results in normal variables. - The
try_run()
command gainedRUN_OUTPUT_STDOUT_VARIABLE
andRUN_OUTPUT_STDERR_VARIABLE
options to capture stdout and stderr separately from the output of the compiled program.
Variables¶
- The
BSD
andCMAKE_HOST_BSD
variables are now set to a string value when the target or host system is BSD, respectively. - The
LINUX
andCMAKE_HOST_LINUX
variables are now set to true when the target or host system is Linux, respectively. - The
CMAKE_MSVC_DEBUG_INFORMATION_FORMAT
variable andMSVC_DEBUG_INFORMATION_FORMAT
target property were introduced to select the debug information format for compilers targeting the MSVC ABI. See policyCMP0141
. - The
CMAKE_XCODE_SCHEME_ENABLE_GPU_API_VALIDATION
variable and correspondingXCODE_SCHEME_ENABLE_GPU_API_VALIDATION
target property were added to tell theXcode
generator what to put in the scheme'sMetal: API Validation
setting. - The
CMAKE_XCODE_SCHEME_ENABLE_GPU_SHADER_VALIDATION
variable and correspondingXCODE_SCHEME_ENABLE_GPU_SHADER_VALIDATION
target property were added to tell theXcode
generator what to put in the scheme'sMetal: Shader Validation
setting. - The
CMAKE_XCODE_SCHEME_LAUNCH_MODE
variable and correspondingXCODE_SCHEME_LAUNCH_MODE
target property were added to tell theXcode
generator what to put in the scheme's "Launch" mode setting. - The
CMAKE_XCODE_SCHEME_LAUNCH_CONFIGURATION
variable and correspondingXCODE_SCHEME_LAUNCH_CONFIGURATION
target property were added to tell theXcode
generator what configuration to put in the scheme's Launch action.
Properties¶
- The
<LANG>_COMPILER_LAUNCHER
target property now supportsgenerator expressions
. - The
EXPORT_NO_SYSTEM
target property was added to specify thatinstall(EXPORT)
andexport()
commands will generate na imported target withSYSTEM
propertyOFF
. - The
SYSTEM
target property was added to specify whether a target should be treated as a system library (i.e. its include directories are automaticallySYSTEM
when compiling consumers). If not set, the default is the previous behavior: on for imported targets and off for other targets. - The
SYSTEM
directory property was added to initialize theSYSTEM
target property for targets created in that directory.
Modules¶
The
FetchContent
moduleFetchContent_Declare()
command gained aSYSTEM
option to enable theSYSTEM
directory property in the subdirectory.The
FindCUDAToolkit
module now provides a target for nvtx3 for CUDA 10.0+, which supersedes nvToolsExt. A deprecation warning is emitted when usingnvToolsExt
if the project requires CMake 3.25 and CUDA 10.0+ is used.The
FindDoxygen
module's version handling has been improved:- Multiple candidate installations will now be considered, if needed, to satisfy version constraints. Previously, only the first one encountered would be considered.
- Version ranges are supported.
- Variations in the version format reported by Doxygen are now tolerated (e.g. a trailing git commit hash).
The
FindOpenAL
module now provides an imported target.The
FindOpenSP
module was added to find the OpenSP library.The
FindVulkan
module gained support for new components:dxc
DirectX Shader Compiler.
volk
Volk open-source vulkan meta-loader.
CPack¶
- The
CPack Archive Generator
gained a newCPACK_ARCHIVE_FILE_EXTENSION
variable to control the package file name extension. - The
CPack NSIS Generator
gained two new variablesCPACK_NSIS_EXECUTABLE_PRE_ARGUMENTS
andCPACK_NSIS_EXECUTABLE_POST_ARGUMENTS
to provide arguments to the nsis executable invocation. - The
CPack
module gained theCPACK_READELF_EXECUTABLE
,CPACK_OBJCOPY_EXECUTABLE
, andCPACK_OBJDUMP_EXECUTABLE
variables to control the locations of binutils used bycpack(1)
.
Deprecated and Removed Features¶
- The
IMPORTED_NO_SYSTEM
target property has been deprecated in favor ofSYSTEM
andEXPORT_NO_SYSTEM
. - The
Visual Studio 10 2010
generator has been removed. - The
Visual Studio 11 2012
generator is now deprecated and will be removed in a future version of CMake.
Other Changes¶
- The
SSL_CERT_FILE
andSSL_CERT_DIR
environment variables can now be used to override where to find certificate authorities for TLS/SSL operations. - If
<LANG>_CLANG_TIDY
includes a-p
argument, the full compiler command line is no longer appended after--
. - The
Xcode
generator no longer adds the per-config suffix$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
to library search paths. See policyCMP0142
.
Updates¶
Changes made since CMake 3.25.0 include the following.
3.25.1¶
- On Windows, when targeting the MSVC ABI, the
find_library()
command no longer accepts.a
file names. This behavior was added in CMake 3.25.0, but has been reverted due finding GNU-ABI libraries in cases we did not previously.