<div dir="ltr">We are pleased to announce that CMake 3.31 is now available for download.<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.31">https://cmake.org/cmake/help/v3.31</a><br><br>Release notes appear below and are also published at<br>  <a href="https://cmake.org/cmake/help/v3.31/release/3.31.html">https://cmake.org/cmake/help/v3.31/release/3.31.html</a><br><br>Release milestone is available at:<br>  <a href="https://gitlab.kitware.com/cmake/cmake/-/milestones/150">https://gitlab.kitware.com/cmake/cmake/-/milestones/150</a><br><br>Some of the most significant changes in CMake 3.31 are:<br><br>* "cmake-presets(7)" files may now include comments using the key<br>  "$comment" at any level within the JSON object to provide<br>  documentation.<br><br>* The Ninja Generators and Makefile Generators now produce a "codegen"<br>  build target.  See policy "CMP0171".  It drives a subset of the<br>  build graph sufficient to run custom commands created with<br>  "add_custom_command()"'s new "CODEGEN" option.<br><br>* The "CMAKE_LINK_LIBRARIES_STRATEGY" variable and corresponding<br>  "LINK_LIBRARIES_STRATEGY" target property were added to optionally<br>  specify the strategy CMake uses to generate link lines.<br><br>* The "CMAKE_AIX_SHARED_LIBRARY_ARCHIVE" variable and corresponding<br>  "AIX_SHARED_LIBRARY_ARCHIVE" target property were added to create<br>  shared libraries on AIX as shared library archives.<br><br>* The "CMAKE_EXPORT_BUILD_DATABASE" variable, a corresponding<br>  "CMAKE_EXPORT_BUILD_DATABASE" environment variable, and an<br>  "EXPORT_BUILD_DATABASE" target property, were added to enable<br>  exporting C++ module compile commands. This is only supported with<br>  Ninja Generators.<br><br>* The "CMAKE_<LANG>_HOST_COMPILER_ID" and<br>  "CMAKE_<LANG>_HOST_COMPILER_VERSION" variables were added, where<br>  "<LANG>" is either "CUDA" or "HIP".  They are populated when<br>  "CMAKE_<LANG>_COMPILER_ID" is "NVIDIA" to identify NVCC's host<br>  compiler.<br><br>* Compatibility with versions of CMake older than 3.10 is now<br>  deprecated and will be removed from a future version.  Calls to<br>  "cmake_minimum_required()" or "cmake_policy()" that set the policy<br>  version to an older value now issue a deprecation diagnostic.<br><br>* When static libraries on link lines are de-duplicated (by policy<br>  "CMP0156"), the first occurrence is now kept on all platforms. See<br>  policy "CMP0179".<br><br>* The "file(DOWNLOAD)" and "file(UPLOAD)" commands now verify TLS<br>  server certificates for connections to "https://" URLs by default.<br>  See the "CMAKE_TLS_VERIFY" variable for details. This change was<br>  made without a policy so that users are protected even when building<br>  projects that have not been updated. Users may set the<br>  "CMAKE_TLS_VERIFY" environment variable to "0" to restore the old<br>  default.<br><br><br><br>CMake 3.31 Release Notes<br>************************<br><br>Changes made since CMake 3.30 include the following.<br><br><br>New Features<br>============<br><br><br>Presets<br>-------<br><br>* "cmake-presets(7)" files may now include comments using the key<br>  "$comment" at any level within the JSON object to provide<br>  documentation.<br><br>* "cmake-presets(7)" files may now request graphviz output using the<br>  "graphviz" key in a configure preset.<br><br><br>Generators<br>----------<br><br>* The Ninja Generators and Makefile Generators now produce a "codegen"<br>  build target.  See policy "CMP0171".  It drives a subset of the<br>  build graph sufficient to run custom commands created with<br>  "add_custom_command()"'s new "CODEGEN" option.<br><br><br>Command-Line<br>------------<br><br>* The "cmake --workflow" mode now accepts a preset name as the first<br>  argument, allowing the simpler command line "cmake --workflow<br>  <preset>".<br><br>* The "cmake -LR[A][H]" option was added to list cache entries whose<br>  names match a regular expression.<br><br><br>Compilers<br>---------<br><br>* The LFortran compiler is now supported with "compiler id"<br>  "LFortran".<br><br><br>Commands<br>--------<br><br>* The "add_custom_command()" command gained a "CODEGEN" option to mark<br>  a custom command's outputs as dependencies of a "codegen" target.<br>  See policy "CMP0171".<br><br>* The "cmake_pkg_config()" command was added as an endpoint for using<br>  CMake's native pkg-config format parser. The only supported option<br>  in this release is "EXTRACT", which provides low-level access to the<br>  values produced by parsing a pkg-config file. For most users, this<br>  is not yet a suitable replacement for the "FindPkgConfig" module.<br><br>* The "file(ARCHIVE_CREATE)" command gained a "WORKING_DIRECTORY"<br>  option to specify a working directory for the archiving process.<br><br>* The "file(MAKE_DIRECTORY)" command gained a "RESULT" option to<br>  capture failure in a result variable.<br><br>* The "install(FILES)" and "install(DIRECTORY)" commands' "TYPE"<br>  argument gained support for a "LIBEXEC" type.<br><br><br>Variables<br>---------<br><br>* The "CMAKE_AIX_SHARED_LIBRARY_ARCHIVE" variable and corresponding<br>  "AIX_SHARED_LIBRARY_ARCHIVE" target property were added to create<br>  shared libraries on AIX as shared library archives.<br><br>* The "CMAKE_EXPORT_BUILD_DATABASE" variable, a corresponding<br>  "CMAKE_EXPORT_BUILD_DATABASE" environment variable, and an<br>  "EXPORT_BUILD_DATABASE" target property, were added to enable<br>  exporting C++ module compile commands. This is only supported with<br>  Ninja Generators.<br><br>* The "CMAKE_HOST_EXECUTABLE_SUFFIX" variable was added to provide the<br>  suffix for executable names on the host platform.<br><br>* The "CMAKE_<LANG>_HOST_COMPILER_ID" and<br>  "CMAKE_<LANG>_HOST_COMPILER_VERSION" variables were added, where<br>  "<LANG>" is either "CUDA" or "HIP".  They are populated when<br>  "CMAKE_<LANG>_COMPILER_ID" is "NVIDIA" to identify NVCC's host<br>  compiler.<br><br>* The "CMAKE_<LANG>_STANDARD_LINK_DIRECTORIES" variable was added.<br>  Toolchain files can set this variable to control which link library<br>  directory paths are always passed to the compiler for the specified<br>  language.<br><br>* The "CMAKE_LINK_LIBRARIES_STRATEGY" variable and corresponding<br>  "LINK_LIBRARIES_STRATEGY" target property were added to optionally<br>  specify the strategy CMake uses to generate link lines.<br><br><br>Properties<br>----------<br><br>* The "MACOSX_FRAMEWORK_BUNDLE_NAME" target property was added to set<br>  the "CFBundleName" key in an Apple "FRAMEWORK"'s "Info.plist" file.<br><br>* The "UNITY_BUILD" target property now supports the "CUDA" language.<br><br>* The "VS_FRAMEWORK_REFERENCES" target property was added to tell<br>  Visual Studio Generators to add framework references.<br><br><br>Modules<br>-------<br><br>* Check modules now support a "CMAKE_REQUIRED_LINK_DIRECTORIES"<br>  variable. The following modules gained this support:<br><br>  * "CMakePushCheckState"<br><br>  * "CheckCCompilerFlag"<br><br>  * "CheckCSourceCompiles"<br><br>  * "CheckCSourceRuns"<br><br>  * "CheckCXXCompilerFlag"<br><br>  * "CheckCXXSourceCompiles"<br><br>  * "CheckCXXSourceRuns"<br><br>  * "CheckCXXSymbolExists"<br><br>  * "CheckCompilerFlag"<br><br>  * "CheckFortranCompilerFlag"<br><br>  * "CheckFortranFunctionExists"<br><br>  * "CheckFortranSourceCompiles"<br><br>  * "CheckFortranSourceRuns"<br><br>  * "CheckFunctionExists"<br><br>  * "CheckIncludeFile"<br><br>  * "CheckIncludeFileCXX"<br><br>  * "CheckIncludeFiles"<br><br>  * "CheckOBJCCompilerFlag"<br><br>  * "CheckLibraryExists"<br><br>  * "CheckOBJCCompilerFlag"<br><br>  * "CheckOBJCSourceCompiles"<br><br>  * "CheckOBJCSourceRuns"<br><br>  * "CheckOBJCXXCompilerFlag"<br><br>  * "CheckOBJCXXSourceCompiles"<br><br>  * "CheckOBJCXXSourceRuns"<br><br>  * "CheckPrototypeDefinition"<br><br>  * "CheckSourceCompiles"<br><br>  * "CheckSourceRuns"<br><br>  * "CheckStructHasMember"<br><br>  * "CheckSymbolExists"<br><br>  * "CheckTypeSize"<br><br>  * "CheckVariableExists"<br><br>* The "CMakePackageConfigHelpers" module's<br>  "generate_apple_platform_selection_file()" function gained support<br>  for iOS Mac Catalyst.<br><br>* The "GoogleTest" module "gtest_discover_tests()" command gained a<br>  new "DISCOVERY_EXTRA_ARGS" keyword.  It allows extra arguments to be<br>  appended to the command line when querying for the list of tests.<br><br>* The "FindCUDAToolkit" module now provides a "CUDA::nvml_static"<br>  target.<br><br>* The "FindOpenMP" module gained support for the "CUDA" language.<br><br><br>CTest<br>-----<br><br>* The "ctest_submit()" command and "ctest -T Submit" step now verify<br>  TLS server certificates for connections to "https://" URLs by<br>  default.  See the "CTEST_TLS_VERIFY" variable for details.<br><br>* The "ctest_submit()" command and "ctest -T Submit" step now require<br>  TLS 1.2 or higher for connections to "https://" URLs by default.<br>  See the "CTEST_TLS_VERSION" variable for details.<br><br><br>CPack<br>-----<br><br>* The "CPack DEB Generator" gained a "CPACK_DEBIAN_PACKAGE_MULTIARCH"<br>  option to support multi-arch packages.<br><br>* The "CPack IFW Generator" gained the new<br>  "CPACK_IFW_PACKAGE_PRODUCT_IMAGE_URLS" variable to specify images<br>  associated with entries of "CPACK_IFW_PACKAGE_PRODUCT_IMAGES". This<br>  feature is available for QtIFW 4.0 and newer.<br><br>* The "CPack RPM Generator" gained support for "zstd" as a<br>  "CPACK_RPM_COMPRESSION_TYPE" value.<br><br>* The "CPack" module enables per-machine installation by default in<br>  the "CPack WIX Generator".  See policy "CMP0172" and the<br>  "CPACK_WIX_INSTALL_SCOPE" variable.<br><br><br>Deprecated and Removed Features<br>===============================<br><br>* Compatibility with versions of CMake older than 3.10 is now<br>  deprecated and will be removed from a future version.  Calls to<br>  "cmake_minimum_required()" or "cmake_policy()" that set the policy<br>  version to an older value now issue a deprecation diagnostic.<br><br>* The "CMakeFindFrameworks" module has been deprecated via "CMP0173".<br>  Projects should use "find_library()" instead.<br><br>* The "Visual Studio 12 2013" generator has been removed.<br><br><br>Other Changes<br>=============<br><br>* When static libraries on link lines are de-duplicated (by policy<br>  "CMP0156"), the first occurrence is now kept on all platforms. See<br>  policy "CMP0179".<br><br>* Empty list elements in the "TEST_LAUNCHER" and<br>  "CROSSCOMPILING_EMULATOR" target properties are now preserved by:<br><br>  * The "add_test()" command.<br><br>  * The "ExternalData_Add_Test()" command from the "ExternalData"<br>    module.<br><br>  * The "gtest_add_tests()" and "gtest_discover_tests()" commands from<br>    the "GoogleTest" module. Empty list elements after the<br>    "EXTRA_ARGS" keyword of these two commands are also now preserved.<br><br>  See policy "CMP0178".<br><br>* The "execute_process()" command's "ENCODING" option, meaningful on<br>  Windows, now defaults to "UTF-8". See policy "CMP0176".<br><br>* The "file(DOWNLOAD)" and "file(UPLOAD)" commands now verify TLS<br>  server certificates for connections to "https://" URLs by default.<br>  See the "CMAKE_TLS_VERIFY" variable for details. This change was<br>  made without a policy so that users are protected even when building<br>  projects that have not been updated. Users may set the<br>  "CMAKE_TLS_VERIFY" environment variable to "0" to restore the old<br>  default.<br><br>* The "file(DOWNLOAD)" and "file(UPLOAD)" commands now require TLS 1.2<br>  or higher for connections to "https://" URLs by default. See the<br>  "CMAKE_TLS_VERSION" variable for details.<br><br>* The "file(GET_RUNTIME_DEPENDENCIES)" command was updated to more<br>  closely match the dynamic loader's behavior on Linux.<br><br>* The "install()" command's "DESTINATION" arguments are now<br>  normalized, with the exception of "INCLUDES DESTINATION" arguments<br>  in "install(TARGETS)". See policy "CMP0177".<br><br>* The "project()" command now always sets "<PROJECT-NAME>_SOURCE_DIR",<br>  "<PROJECT-NAME>_BINARY_DIR", and "<PROJECT-NAME>_IS_TOP_LEVEL" as<br>  both normal variables and cache entries.  See policy "CMP0180".<br><br>* The "cmake_parse_arguments(PARSE_ARGV)" command now defines a<br>  variable for an empty string after a single-value keyword. See<br>  policy "CMP0174".<br><br><br>----------------------------------------------------------------------------<br>Changes made since CMake 3.31.0-rc3:<br><br>Ben Boeckel (2):<br>  ci: use JSON to transfer environment variables<br>  gitlab-ci: remove `dependencies` from jobs<br><br>Brad King (1):<br>  CMake 3.31.0<br><br></div>