Back to Cmake

CMake 3.31 Release Notes

Help/release/3.31.rst

4.3.210.6 KB
Original Source

CMake 3.31 Release Notes


.. only:: html

.. contents::

Changes made since CMake 3.30 include the following.

New Features

Presets

  • :manual:cmake-presets(7) files may now include comments using the key $comment at any level within the JSON object to provide documentation.

  • :manual:cmake-presets(7) files may now request graphviz output using the graphviz key in a configure preset.

Generators

  • The :ref:Ninja Generators and :ref:Makefile Generators now produce a codegen build target. See policy :policy:CMP0171. It drives a subset of the build graph sufficient to run custom commands created with :command:add_custom_command's new CODEGEN option.

Command-Line

  • The :option:cmake --workflow mode now accepts a preset name as the first argument, allowing the simpler command line :option:cmake --workflow \<preset\> <cmake--workflow --preset>.

  • The :option: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 :variable:compiler id <CMAKE_<LANG>_COMPILER_ID> LFortran.

Commands

  • The :command:add_custom_command command gained a CODEGEN option to mark a custom command's outputs as dependencies of a codegen target. See policy :policy:CMP0171.

  • The :command: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 :module:FindPkgConfig module.

  • The :command:file(ARCHIVE_CREATE) command gained a WORKING_DIRECTORY option to specify a working directory for the archiving process.

  • The :command:file(MAKE_DIRECTORY) command gained a RESULT option to capture failure in a result variable.

  • The :command:install(FILES) and :command:install(DIRECTORY) commands' TYPE argument gained support for a LIBEXEC type.

Variables

  • The :variable:CMAKE_AIX_SHARED_LIBRARY_ARCHIVE variable and corresponding :prop_tgt:AIX_SHARED_LIBRARY_ARCHIVE target property were added to create shared libraries on AIX as shared library archives.

  • The :variable:CMAKE_EXPORT_BUILD_DATABASE variable, a corresponding :envvar:CMAKE_EXPORT_BUILD_DATABASE environment variable, and an :prop_tgt:EXPORT_BUILD_DATABASE target property, were added to enable exporting C++ module compile commands. This is only supported with :ref:Ninja Generators.

  • The :variable:CMAKE_HOST_EXECUTABLE_SUFFIX variable was added to provide the suffix for executable names on the host platform.

  • The :variable:CMAKE_<LANG>_HOST_COMPILER_ID and :variable:CMAKE_<LANG>_HOST_COMPILER_VERSION variables were added, where <LANG> is either CUDA or HIP. They are populated when :variable:CMAKE_<LANG>_COMPILER_ID is NVIDIA to identify NVCC's host compiler.

  • The :variable: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 :variable:CMAKE_LINK_LIBRARIES_STRATEGY variable and corresponding :prop_tgt:LINK_LIBRARIES_STRATEGY target property were added to optionally specify the strategy CMake uses to generate link lines.

  • The :envvar:CMAKE_CONFIG_DIR environment variable was added to specify a CMake user-wide configuration directory for :manual:cmake-file-api(7) queries.

Properties

  • The :prop_tgt:MACOSX_FRAMEWORK_BUNDLE_NAME <MACOSX_FRAMEWORK_INFO_PLIST> target property was added to set the CFBundleName key in an Apple :prop_tgt:FRAMEWORK's Info.plist file.

  • The :prop_tgt:UNITY_BUILD target property now supports the CUDA language.

  • The :prop_tgt:VS_FRAMEWORK_REFERENCES target property was added to tell :ref:Visual Studio Generators to add framework references.

Modules

  • Check modules now support a CMAKE_REQUIRED_LINK_DIRECTORIES variable. The following modules gained this support:

    • :module:CMakePushCheckState
    • :module:CheckCCompilerFlag
    • :module:CheckCSourceCompiles
    • :module:CheckCSourceRuns
    • :module:CheckCXXCompilerFlag
    • :module:CheckCXXSourceCompiles
    • :module:CheckCXXSourceRuns
    • :module:CheckCXXSymbolExists
    • :module:CheckCompilerFlag
    • :module:CheckFortranCompilerFlag
    • :module:CheckFortranFunctionExists
    • :module:CheckFortranSourceCompiles
    • :module:CheckFortranSourceRuns
    • :module:CheckFunctionExists
    • :module:CheckIncludeFile
    • :module:CheckIncludeFileCXX
    • :module:CheckIncludeFiles
    • :module:CheckOBJCCompilerFlag
    • :module:CheckLibraryExists
    • :module:CheckOBJCCompilerFlag
    • :module:CheckOBJCSourceCompiles
    • :module:CheckOBJCSourceRuns
    • :module:CheckOBJCXXCompilerFlag
    • :module:CheckOBJCXXSourceCompiles
    • :module:CheckOBJCXXSourceRuns
    • :module:CheckPrototypeDefinition
    • :module:CheckSourceCompiles
    • :module:CheckSourceRuns
    • :module:CheckStructHasMember
    • :module:CheckSymbolExists
    • :module:CheckTypeSize
    • :module:CheckVariableExists
  • The :module:CMakePackageConfigHelpers module's :command:generate_apple_platform_selection_file function gained support for iOS Mac Catalyst.

  • The :module:GoogleTest module :command: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 :module:FindCUDAToolkit module now provides a CUDA::nvml_static target.

  • The :module:FindOpenMP module gained support for the CUDA language.

CTest

  • The :command:ctest_submit command and :option:ctest -T Submit <ctest -T> step now verify TLS server certificates for connections to https:// URLs by default. See the :variable:CTEST_TLS_VERIFY variable for details.

  • The :command:ctest_submit command and :option:ctest -T Submit <ctest -T> step now require TLS 1.2 or higher for connections to https:// URLs by default. See the :variable:CTEST_TLS_VERSION variable for details.

CPack

  • The :cpack_gen:CPack DEB Generator gained a :variable:CPACK_DEBIAN_PACKAGE_MULTIARCH option to support multi-arch packages.

  • The :cpack_gen:CPack IFW Generator gained the new :variable:CPACK_IFW_PACKAGE_PRODUCT_IMAGE_URLS variable to specify images associated with entries of :variable:CPACK_IFW_PACKAGE_PRODUCT_IMAGES. This feature is available for QtIFW 4.0 and newer.

  • The :cpack_gen:CPack RPM Generator gained support for zstd as a :variable:CPACK_RPM_COMPRESSION_TYPE value.

  • The :module:CPack module enables per-machine installation by default in the :cpack_gen:CPack WIX Generator. See policy :policy:CMP0172 and the :variable: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 :command:cmake_minimum_required or :command:cmake_policy that set the policy version to an older value now issue a deprecation diagnostic.

  • The :module:CMakeFindFrameworks module has been deprecated via :policy:CMP0173. Projects should use :command:find_library instead.

  • The :generator:Visual Studio 12 2013 generator has been removed.

Other Changes

  • When static libraries on link lines are de-duplicated (by policy :policy:CMP0156), the first occurrence is now kept on all platforms. See policy :policy:CMP0179.

  • Empty list elements in the :prop_tgt:TEST_LAUNCHER and :prop_tgt:CROSSCOMPILING_EMULATOR target properties are now preserved by:

    • The :command:add_test command.
    • The :command:ExternalData_Add_Test command from the :module:ExternalData module.
    • The :command:gtest_add_tests and :command:gtest_discover_tests commands from the :module:GoogleTest module. Empty list elements after the EXTRA_ARGS keyword of these two commands are also now preserved.

    See policy :policy:CMP0178.

  • The :command:execute_process command's ENCODING option, meaningful on Windows, now defaults to UTF-8. See policy :policy:CMP0176.

  • The :command:file(DOWNLOAD) and :command:file(UPLOAD) commands now verify TLS server certificates for connections to https:// URLs by default. See the :variable: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 :envvar:CMAKE_TLS_VERIFY environment variable to 0 to restore the old default.

  • The :command:file(DOWNLOAD) and :command:file(UPLOAD) commands now require TLS 1.2 or higher for connections to https:// URLs by default. See the :variable:CMAKE_TLS_VERSION variable for details.

  • The :command:file(GET_RUNTIME_DEPENDENCIES) command was updated to more closely match the dynamic loader's behavior on Linux.

  • The :command:install command's DESTINATION arguments are now :ref:normalized <Normalization>, with the exception of INCLUDES DESTINATION arguments in :command:install(TARGETS). See policy :policy:CMP0177.

  • The :command:project command now always sets :variable:<PROJECT-NAME>_SOURCE_DIR, :variable:<PROJECT-NAME>_BINARY_DIR, and :variable:<PROJECT-NAME>_IS_TOP_LEVEL as both normal variables and cache entries. See policy :policy:CMP0180.

  • The :command:cmake_parse_arguments(PARSE_ARGV) command now defines a variable for an empty string after a single-value keyword. See policy :policy:CMP0174.

Updates

Changes made since CMake 3.31.0 include the following.

3.31.1, 3.31.2, 3.31.3, 3.31.4, 3.31.5, 3.31.6, 3.31.7, 3.31.8, 3.31.9

  • These versions made no changes to documented features or interfaces. Some implementation updates were made to support ecosystem changes and/or fix regressions.

3.31.10

  • The :command:execute_process command once again terminates child processes when its TIMEOUT is reached. This was accidentally regressed by CMake 3.29.

3.31.11, 3.31.12

  • These versions made no changes to documented features or interfaces. Some implementation updates were made to support ecosystem changes and/or fix regressions.