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