<div dir="ltr">I am proud to announce the first CMake 3.25 release candidate.<br>  <a href="https://cmake.org/download/">https://cmake.org/download/</a><br><br>Documentation is available at:<br>  <a href="https://cmake.org/cmake/help/v3.25">https://cmake.org/cmake/help/v3.25</a><br><br>Release notes appear below and are also published at<br>  <a href="https://cmake.org/cmake/help/v3.25/release/3.25.html">https://cmake.org/cmake/help/v3.25/release/3.25.html</a><br><br>Some of the more significant changes in CMake 3.25 are:<br><br><br>* The "find_file()", "find_path()", "find_library()", and<br>  "find_program()" commands gained a "VALIDATOR" option to specify a<br>  function to be called for each candidate item to validate it.<br><br>* The "try_compile()" and "try_run()" commands gained new signatures<br>  that more consistently use keyword dispatch and do not require a<br>  binary directory to be specified.  Additionally, these signatures<br>  use a unique directory for each invocation, which allows multiple<br>  outputs to be preserved when using "cmake --debug-trycompile".<br><br>* The "add_subdirectory()" command gained a "SYSTEM" option to enable<br>  the "SYSTEM" directory property in the subdirectory.<br><br>* The "block()" and "endblock()" commands were added to manage<br>  specific scopes (policy or variable) for a contained block of<br>  commands.<br><br>* The "return()" command gained a "PROPAGATE" option to propagate<br>  variables to the scope to which control returns. See policy<br>  "CMP0140".<br><br>* The "BSD" and "CMAKE_HOST_BSD" variables are now set to a string<br>  value when the target or host system is BSD, respectively.<br><br>* The "LINUX" and "CMAKE_HOST_LINUX" variables are now set to true<br>  when the target or host system is Linux, respectively.<br><br>* The "CMAKE_MSVC_DEBUG_INFORMATION_FORMAT" variable and<br>  "MSVC_DEBUG_INFORMATION_FORMAT" target property were introduced to<br>  select the debug information format for compilers targeting the MSVC<br>  ABI. See policy "CMP0141".<br><br><br>CMake 3.25 Release Notes<br>************************<br><br>Changes made since CMake 3.24 include the following.<br><br><br>New Features<br>============<br><br><br>Presets<br>-------<br><br>* The "cmake-presets(7)" schema version has been bumped to "6".<br><br>* The "cmake-presets(7)" format now supports a "packagePresets" field<br>  to specify presets for "cpack --preset".<br><br>* The "cmake-presets(7)" format now supports a "workflowPresets" field<br>  to specify presets for "cmake --workflow".<br><br><br>Languages<br>---------<br><br>* The "Compile Features" functionality is now aware of C++26, and<br>  defines a "cxx_std_26" meta-feature. C++26 compiler modes may also<br>  be specified via the "CXX_STANDARD", "CUDA_STANDARD",<br>  "HIP_STANDARD", or "OBJCXX_STANDARD" target properties.<br><br>* "CUDA" language support now includes device link-time optimization<br>  when using "nvcc".  The "CMAKE_INTERPROCEDURAL_OPTIMIZATION"<br>  variable and the associated "INTERPROCEDURAL_OPTIMIZATION" target<br>  property will activate device LTO.<br><br><br>Command-Line<br>------------<br><br>* A "cmake --workflow --preset" mode was added to drive sequences of<br>  configure, build, test, and package operations through a single<br>  command.<br><br>* The "cmake -E capabilities" command gained a new "tls" field that<br>  tells whether or not TLS is enabled.<br><br>* The "cmake -E env" command-line tool gained a "--modify" flag to<br>  support "ENVIRONMENT_MODIFICATION" operations.<br><br>* The "cmake --debug-trycompile" option now prints log messages<br>  reporting the directory in which each try-compile check is done.<br><br><br>Compilers<br>---------<br><br>* Support for the Tasking compiler toolsets (SmartCode, TriCore,<br>  Standalone: ARM, MCS, 8051) was added with compiler id "Tasking".<br>  See the "CMAKE_TASKING_TOOLSET" variable.<br><br><br>Commands<br>--------<br><br>* The "add_subdirectory()" command gained a "SYSTEM" option to enable<br>  the "SYSTEM" directory property in the subdirectory.<br><br>* The "block()" and "endblock()" commands were added to manage<br>  specific scopes (policy or variable) for a contained block of<br>  commands.<br><br>* The "cmake_language()" command gained a new "GET_MESSAGE_LOG_LEVEL"<br>  sub-command.  It can be used to query the current message logging<br>  level.<br><br>* The "find_file()", "find_path()", "find_library()", and<br>  "find_program()" commands gained a "VALIDATOR" option to specify a<br>  function to be called for each candidate item to validate it.<br><br>* The "find_package()" command now considers paths of the form<br>  "<prefix>/<name>*/(cmake|CMake)/<name>*/" when searching for package<br>  configuration files.<br><br>* The "return()" command gained a "PROPAGATE" option to propagate<br>  variables to the scope to which control returns. See policy<br>  "CMP0140".<br><br>* The "try_compile()" and "try_run()" commands gained new signatures<br>  that more consistently use keyword dispatch and do not require a<br>  binary directory to be specified.  Additionally, these signatures<br>  use a unique directory for each invocation, which allows multiple<br>  outputs to be preserved when using "cmake --debug-trycompile".<br><br>* The "try_compile()" and "try_run()" commands gained the option<br>  "NO_CACHE" to store results in normal variables.<br><br>* The "try_run()" command gained "RUN_OUTPUT_STDOUT_VARIABLE" and<br>  "RUN_OUTPUT_STDERR_VARIABLE" options to capture stdout and stderr<br>  separately from the output of the compiled program.<br><br><br>Variables<br>---------<br><br>* The "BSD" and "CMAKE_HOST_BSD" variables are now set to a string<br>  value when the target or host system is BSD, respectively.<br><br>* The "LINUX" and "CMAKE_HOST_LINUX" variables are now set to true<br>  when the target or host system is Linux, respectively.<br><br>* The "CMAKE_MSVC_DEBUG_INFORMATION_FORMAT" variable and<br>  "MSVC_DEBUG_INFORMATION_FORMAT" target property were introduced to<br>  select the debug information format for compilers targeting the MSVC<br>  ABI. See policy "CMP0141".<br><br>* The "CMAKE_XCODE_SCHEME_ENABLE_GPU_API_VALIDATION" variable and<br>  corresponding "XCODE_SCHEME_ENABLE_GPU_API_VALIDATION" target<br>  property were added to tell the "Xcode" generator what to put in the<br>  scheme's "Metal: API Validation" setting.<br><br>* The "CMAKE_XCODE_SCHEME_ENABLE_GPU_SHADER_VALIDATION" variable and<br>  corresponding "XCODE_SCHEME_ENABLE_GPU_SHADER_VALIDATION" target<br>  property were added to tell the "Xcode" generator what to put in the<br>  scheme's "Metal: Shader Validation" setting.<br><br>* The "CMAKE_XCODE_SCHEME_LAUNCH_MODE" variable and corresponding<br>  "XCODE_SCHEME_LAUNCH_MODE" target property were added to tell the<br>  "Xcode" generator what to put in the scheme's "Launch" mode setting.<br><br>* The "CMAKE_XCODE_SCHEME_LAUNCH_CONFIGURATION" variable and<br>  corresponding "XCODE_SCHEME_LAUNCH_CONFIGURATION" target property<br>  were added to tell the "Xcode" generator what configuration to put<br>  in the scheme's Launch action.<br><br><br>Properties<br>----------<br><br>* The "<LANG>_COMPILER_LAUNCHER" target property now supports<br>  "generator expressions".<br><br>* The "EXPORT_NO_SYSTEM" target property was added to specify that<br>  "install(EXPORT)" and "export()" commands will generate an imported<br>  target with "SYSTEM" property "OFF".<br><br>* The "SYSTEM" target property was added to specify whether a target<br>  should be treated as a system library (i.e. its include directories<br>  are automatically "SYSTEM" when compiling consumers).  If not set,<br>  the default is the previous behavior: on for imported targets and<br>  off for other targets.<br><br>* The "SYSTEM" directory property was added to initialize the "SYSTEM"<br>  target property for targets created in that directory.<br><br><br>Modules<br>-------<br><br>* The "FetchContent" module "FetchContent_Declare()" command gained a<br>  "SYSTEM" option to enable the "SYSTEM" directory property in the<br>  subdirectory.<br><br>* The "FindCUDAToolkit" module now provides a target for nvtx3 for<br>  CUDA 10.0+, which supersedes nvToolsExt. A deprecation warning is<br>  emitted when using "nvToolsExt" if the project requires CMake 3.25<br>  and CUDA 10.0+ is used.<br><br>* The "FindDoxygen" module's version handling has been improved:<br><br>  * Multiple candidate installations will now be considered, if<br>    needed, to satisfy version constraints.  Previously, only the<br>    first one encountered would be considered.<br><br>  * Version ranges are supported.<br><br>  * Variations in the version format reported by Doxygen are now<br>    tolerated (e.g. a trailing git commit hash).<br><br>* The "FindOpenAL" module now provides an imported target.<br><br>* The "FindOpenSP" module was added to find the OpenSP library.<br><br>* The "FindVulkan" module gained support for new components:<br><br>  "dxc"<br>     DirectX Shader Compiler.<br><br>  "volk"<br>     Volk open-source vulkan meta-loader.<br><br><br>CPack<br>-----<br><br>* The "CPack Archive Generator" gained a new<br>  "CPACK_ARCHIVE_FILE_EXTENSION" variable to control the package file<br>  name extension.<br><br>* The "CPack NSIS Generator" gained two new variables<br>  "CPACK_NSIS_EXECUTABLE_PRE_ARGUMENTS" and<br>  "CPACK_NSIS_EXECUTABLE_POST_ARGUMENTS" to provide arguments to the<br>  nsis executable invocation.<br><br>* The "CPack" module gained the "CPACK_READELF_EXECUTABLE",<br>  "CPACK_OBJCOPY_EXECUTABLE", and "CPACK_OBJDUMP_EXECUTABLE" variables<br>  to control the locations of binutils used by "cpack(1)".<br><br><br>Deprecated and Removed Features<br>===============================<br><br>* The "IMPORTED_NO_SYSTEM" target property has been deprecated in<br>  favor of "SYSTEM" and "EXPORT_NO_SYSTEM".<br><br>* The "Visual Studio 10 2010" generator has been removed.<br><br>* The "Visual Studio 11 2012" generator is now deprecated and will be<br>  removed in a future version of CMake.<br><br><br>Other Changes<br>=============<br><br>* On Windows, when targeting the MSVC ABI, the "find_library()"<br>  command now accepts ".a" file names after first considering ".lib".<br>  This is symmetric with existing behavior when targeting the GNU ABI,<br>  in which the command accepts ".lib" file names after first<br>  considering ".a".<br><br>* The "SSL_CERT_FILE" and "SSL_CERT_DIR" environment variables can now<br>  be used to override where to find certificate authorities for<br>  TLS/SSL operations.<br><br>* If "<LANG>_CLANG_TIDY" includes a "-p" argument, the full compiler<br>  command line is no longer appended after "--".<br><br>* The "Xcode" generator no longer adds the per-config suffix<br>  "$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)" to library search<br>  paths. See policy "CMP0142".<br></div>