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 to- 6.
- The - cmake-presets(7)format now supports a- packagePresetsfield to specify presets for- cpack --preset.
- The - cmake-presets(7)format now supports a- workflowPresetsfield to specify presets for- cmake --workflow.
- The - cmake-presets(7)format now supports an- outputJUnitFilefield to specify JUnit output in test presets.
Languages¶
- C++26 compiler modes may now be specified via the - CXX_STANDARD,- CUDA_STANDARD,- HIP_STANDARD, or- OBJCXX_STANDARDtarget properties.
- CUDAlanguage support now includes device link-time optimization when using- nvcc. The- CMAKE_INTERPROCEDURAL_OPTIMIZATIONvariable and the associated- INTERPROCEDURAL_OPTIMIZATIONtarget property will activate device LTO.
Command-Line¶
- A - cmake --workflow --presetmode was added to drive sequences of configure, build, test, and package operations through a single command.
- The - cmake -E capabilitiescommand gained a new- tlsfield that tells whether or not TLS is enabled.
- The - cmake -E envcommand-line tool gained a- --modifyflag to support- ENVIRONMENT_MODIFICATIONoperations.
- The - cmake --debug-trycompileoption 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 the- CMAKE_TASKING_TOOLSETvariable.
Commands¶
- The - add_subdirectory()command gained a- SYSTEMoption to enable the- SYSTEMdirectory property in the subdirectory.
- The - block()and- endblock()commands were added to manage specific scopes (policy or variable) for a contained block of commands.
- The - cmake_language()command gained a new- GET_MESSAGE_LOG_LEVELsub-command. It can be used to query the current message logging level.
- The - find_file(),- find_path(),- find_library(), and- find_program()commands gained a- VALIDATORoption 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 a- PROPAGATEoption to propagate variables to the scope to which control returns. See policy- CMP0140.
- The - try_compile()and- try_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 using- cmake --debug-trycompile.
- The - try_compile()and- try_run()commands gained the option- NO_CACHEto store results in normal variables.
- The - try_run()command gained- RUN_OUTPUT_STDOUT_VARIABLEand- RUN_OUTPUT_STDERR_VARIABLEoptions to capture stdout and stderr separately from the output of the compiled program.
Variables¶
- The - BSDand- CMAKE_HOST_BSDvariables are now set to a string value when the target or host system is BSD, respectively.
- The - LINUXand- CMAKE_HOST_LINUXvariables are now set to true when the target or host system is Linux, respectively.
- The - CMAKE_MSVC_DEBUG_INFORMATION_FORMATvariable and- MSVC_DEBUG_INFORMATION_FORMATtarget property were introduced to select the debug information format for compilers targeting the MSVC ABI. See policy- CMP0141.
- The - CMAKE_XCODE_SCHEME_ENABLE_GPU_API_VALIDATIONvariable and corresponding- XCODE_SCHEME_ENABLE_GPU_API_VALIDATIONtarget property were added to tell the- Xcodegenerator what to put in the scheme's- Metal: API Validationsetting.
- The - CMAKE_XCODE_SCHEME_ENABLE_GPU_SHADER_VALIDATIONvariable and corresponding- XCODE_SCHEME_ENABLE_GPU_SHADER_VALIDATIONtarget property were added to tell the- Xcodegenerator what to put in the scheme's- Metal: Shader Validationsetting.
- The - CMAKE_XCODE_SCHEME_LAUNCH_MODEvariable and corresponding- XCODE_SCHEME_LAUNCH_MODEtarget property were added to tell the- Xcodegenerator what to put in the scheme's "Launch" mode setting.
- The - CMAKE_XCODE_SCHEME_LAUNCH_CONFIGURATIONvariable and corresponding- XCODE_SCHEME_LAUNCH_CONFIGURATIONtarget property were added to tell the- Xcodegenerator what configuration to put in the scheme's Launch action.
Properties¶
- The - <LANG>_COMPILER_LAUNCHERtarget property now supports- generator expressions.
- The - EXPORT_NO_SYSTEMtarget property was added to specify that- install(EXPORT)and- export()commands will generate na imported target with- SYSTEMproperty- OFF.
- The - SYSTEMtarget property was added to specify whether a target should be treated as a system library (i.e. its include directories are automatically- SYSTEMwhen compiling consumers). If not set, the default is the previous behavior: on for imported targets and off for other targets.
- The - SYSTEMdirectory property was added to initialize the- SYSTEMtarget property for targets created in that directory.
Modules¶
- The - FetchContentmodule's- FetchContent_Declare()command gained a- SYSTEMoption which sets the- SYSTEMdirectory property on subdirectories created by- FetchContent_MakeAvailable().
- The - FindCUDAToolkitmodule now provides a target for nvtx3 for CUDA 10.0+, which supersedes nvToolsExt. A deprecation warning is emitted when using- nvToolsExtif the project requires CMake 3.25 and CUDA 10.0+ is used.
- The - FindDoxygenmodule'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 - FindOpenALmodule now provides an imported target.
- The - FindOpenSPmodule was added to find the OpenSP library.
- The - FindVulkanmodule gained support for new components:- dxc
- DirectX Shader Compiler. 
- volk
- Volk open-source vulkan meta-loader. 
 
CPack¶
- The - CPack Archive Generatorgained a new- CPACK_ARCHIVE_FILE_EXTENSIONvariable to control the package file name extension.
- The - CPack NSIS Generatorgained two new variables- CPACK_NSIS_EXECUTABLE_PRE_ARGUMENTSand- CPACK_NSIS_EXECUTABLE_POST_ARGUMENTSto provide arguments to the nsis executable invocation.
- The - CPackmodule gained the- CPACK_READELF_EXECUTABLE,- CPACK_OBJCOPY_EXECUTABLE, and- CPACK_OBJDUMP_EXECUTABLEvariables to control the locations of binutils used by- cpack(1).
Deprecated and Removed Features¶
- The - IMPORTED_NO_SYSTEMtarget property has been deprecated in favor of- SYSTEMand- EXPORT_NO_SYSTEM.
- The - Visual Studio 10 2010generator has been removed.
- The - Visual Studio 11 2012generator is now deprecated and will be removed in a future version of CMake.
Other Changes¶
- The - SSL_CERT_FILEand- SSL_CERT_DIRenvironment variables can now be used to override where to find certificate authorities for TLS/SSL operations.
- If - <LANG>_CLANG_TIDYincludes a- -pargument, the full compiler command line is no longer appended after- --.
- The - Xcodegenerator no longer adds the per-config suffix- $(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)to library search paths. See policy- CMP0142.
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- .afile 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 - icpxcompiler 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. 
