CMake 3.25 Release Notes¶
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
module'sFetchContent_Declare()
command gained aSYSTEM
option which sets theSYSTEM
directory property on subdirectories created byFetchContent_MakeAvailable()
.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.
3.25.2¶
CUDA language level 20 (corresponding to C++20) is now supported with NVCC 12.0 and above.
On Windows, the
icpx
compiler now provided by Intel oneAPI 2023.0 and above is no longer selected because its GNU-like command-line is not yet supported by CMake.
3.25.3¶
This version made no changes to documented features or interfaces. Some implementation updates were made to support ecosystem changes and/or fix regressions.