Help/release/3.31.rst
CMake 3.31 Release Notes
.. only:: html
.. contents::
Changes made since CMake 3.30 include the following.
: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.
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.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.
compiler id <CMAKE_<LANG>_COMPILER_ID> LFortran.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.
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.
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.
Check modules now support a CMAKE_REQUIRED_LINK_DIRECTORIES variable.
The following modules gained this support:
CMakePushCheckStateCheckCCompilerFlagCheckCSourceCompilesCheckCSourceRunsCheckCXXCompilerFlagCheckCXXSourceCompilesCheckCXXSourceRunsCheckCXXSymbolExistsCheckCompilerFlagCheckFortranCompilerFlagCheckFortranFunctionExistsCheckFortranSourceCompilesCheckFortranSourceRunsCheckFunctionExistsCheckIncludeFileCheckIncludeFileCXXCheckIncludeFilesCheckOBJCCompilerFlagCheckLibraryExistsCheckOBJCCompilerFlagCheckOBJCSourceCompilesCheckOBJCSourceRunsCheckOBJCXXCompilerFlagCheckOBJCXXSourceCompilesCheckOBJCXXSourceRunsCheckPrototypeDefinitionCheckSourceCompilesCheckSourceRunsCheckStructHasMemberCheckSymbolExistsCheckTypeSizeCheckVariableExistsThe :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.
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.
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.
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.
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:
add_test command.ExternalData_Add_Test command from the
:module:ExternalData module.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.
Changes made since CMake 3.31.0 include the following.
execute_process command once again terminates child
processes when its TIMEOUT is reached. This was accidentally
regressed by CMake 3.29.