blob: a12bd743969c51451ed3fa47e5e1a09fe96e8478 [file] [log] [blame] [edit]
CMake 4.3 Release Notes
***********************
.. only:: html
.. contents::
Changes made since CMake 4.2 include the following.
New Features
============
Common Package Specification
----------------------------
* Support for importing and exporting packages described using the |CPS|_
(CPS) was added. This improves build system interoperability by allowing
expressive, feature-rich package descriptions to be exchanged in a format
other than CMake Language.
* The :command:`find_package` now searches for and can import CPS packages.
* The :command:`install` and :command:`export` commands gained a new
``PACKAGE_INFO`` sub-command to generate CPS package descriptions.
* The :command:`project` command gained new ``COMPAT_VERSION`` and
``SPDX_LICENSE`` options. These values may be inherited when creating a
CPS package description. See the :command:`install(PACKAGE_INFO)`
documentation for details.
.. _CPS: https://cps-org.github.io/cps/
.. |CPS| replace:: Common Package Specification
Instrumentation
---------------
* :manual:`cmake-instrumentation(7)` was added to enable collection of
timing data, target information, and system diagnostic information during
the configure, generate, build, test, and install steps of a CMake project:
* Instrumentation data are :ref:`indexed <cmake-instrumentation Indexing>`
and provided to :ref:`callbacks <cmake-instrumentation Callbacks>` for
custom processing.
* Instrumentation data are included in submissions to CDash.
* Optionally,
:ref:`Google Trace Event Format <cmake-instrumentation Google Trace File>`
files may be generated to visualize instrumentation data.
Presets
-------
* :manual:`cmake-presets(7)` files now support schema version ``11``.
The ``jobs`` field under test presets now supports an empty string, to
match the behavior of :option:`ctest --parallel` with the value omitted.
* The ``jobs`` field under both build and test presets no longer accept
negative integer values, regardless of the schema version.
File-Based API
--------------
* The :manual:`cmake-file-api(7)` "codemodel" version 2 version field
has been updated to 2.10.
* The :manual:`cmake-file-api(7)` "codemodel" version 2 "target" object
gained a new ``interfaceSources`` array field, and the ``sourceGroups``
array items gained a new ``interfaceSourceIndexes`` array field.
Platforms
---------
* ``HIP`` language code may now be compiled for SPIR-V targets,
e.g., via chipStar. See the :variable:`CMAKE_HIP_PLATFORM` variable.
Command-Line
------------
* :option:`cmake --version` now supports a ``=json-v1`` value to print
detailed version information in a JSON format.
* :option:`cmake --build` now supports specifying a build directory and
preset together. The build preset will be used with the explicit
build directory substituted.
* The :option:`cmake -E` commands
:option:`md5sum <cmake-E md5sum>`,
:option:`sha1sum <cmake-E sha1sum>`,
:option:`sha224sum <cmake-E sha224sum>`,
:option:`sha256sum <cmake-E sha256sum>`,
:option:`sha384sum <cmake-E sha384sum>`, and
:option:`sha512sum <cmake-E sha512sum>`
now support reading from standard input by passing ``-``.
* The :option:`cmake -E bin2c <cmake-E bin2c>` command-line tool was added.
* The :option:`cmake -E tar <cmake-E tar>` command-line tool:
* Gained a ``--cmake-tar-compression-level`` flag to specify the
compression level.
* Gained a ``--cmake-tar-compression-method`` flag to specify the
compression method.
* Gained a ``--cmake-tar-threads`` flag to enable multithreaded operations.
* Now supports specifying compression method and level for ``7zip`` and
``zip`` formats.
* Gained a ``--format=raw`` flag to disable compression.
* Gained a ``--lzma`` flag to specify ``LZMA`` compression.
Commands
--------
* The :command:`cmake_instrumentation` command was added to make
project-level instrumentation queries.
* The :command:`file(ARCHIVE_CREATE)` command:
* Gained a ``THREADS`` option to enable multithreaded operations.
* Now supports ``COMPRESSION`` method ``Deflate`` as an alias for ``GZip``.
* Now supports ``COMPRESSION`` method ``LZMA``.
* Now supports ``COMPRESSION`` method ``LZMA2`` as an alias for ``XZ``.
* Now supports ``COMPRESSION`` method ``PPMd`` for format ``7zip``.
* Now supports ``COMPRESSION`` and ``COMPRESSION_LEVEL`` options
for formats ``7zip`` and ``zip``.
* The :command:`get_property` and :command:`set_property` commands
now support a ``FILE_SET`` scope for file set properties of a target.
* The :command:`string(JSON)` command gained new ``GET_RAW`` and
``STRING_ENCODE`` modes.
* The :command:`source_group` command now supports
:manual:`generator expressions <cmake-generator-expressions(7)>`.
* The :command:`cmake_host_system_information` command gained a
``LOCALE_CHARSET`` query for the expected :manual:`cmake-language(7)`
script encoding.
Variables
---------
* The :variable:`CMAKE_<LANG>_LINK_FLAGS` and
:variable:`CMAKE_<LANG>_LINK_FLAGS_<CONFIG>` variables were added
to support per-language link flags for all target types.
See policy :policy:`CMP0210`.
* The :variable:`CMAKE_VERIFY_PRIVATE_HEADER_SETS` variable and corresponding
:prop_tgt:`VERIFY_PRIVATE_HEADER_SETS` target property were added to
enable build rules that verify all headers in private file sets can be used
on their own.
Properties
----------
* A :prop_tgt:`<LANG>_PVS_STUDIO` target property and supporting
:variable:`CMAKE_<LANG>_PVS_STUDIO` variable were introduced to tell
:ref:`Makefile Generators` and :ref:`Ninja Generators` to run
``pvs-studio-analyzer`` with the compiler for ``C`` and ``CXX`` languages.
* When :prop_tgt:`VERIFY_INTERFACE_HEADER_SETS` is set to true on an executable
target, that target's interface file sets are verified regardless of its
:prop_tgt:`ENABLE_EXPORTS` property. See policy :policy:`CMP0209`.
* The :prop_tgt:`PRIVATE_HEADER_SETS_TO_VERIFY` target property was added to
customize which private file sets to verify when the target's
:prop_tgt:`VERIFY_PRIVATE_HEADER_SETS` property is true.
Modules
-------
* The :module:`FindCUDAToolkit` module now creates a ``CUDA::bin2c``
imported target for the :ref:`bin2c <FindCUDAToolkit_bin2c>` utility.
* The :module:`FindLibXml2` module gained a ``LibXml2_USE_STATIC_LIBS`` hint
to select static libraries.
* The :module:`FindRuby` module now provides imported targets.
* The :module:`FindSQLite3` module now provides imported
targets with the ``SQLite3::`` prefix.
* The :module:`UseJava` module's :command:`add_jar` command now accepts a new
``INCLUDE_MODULES`` option that adds its arguments to the ``--module-path``
argument to the Java compiler. This allows building JAR files that use JPMS
modules in their build.
Generator Expressions
---------------------
* :ref:`String Comparison <String Comparisons Generator Expressions>`
generator expressions were added.
* :genex:`$<STRING:...>` generator expressions were added for
:ref:`query <String Queries Generator Expressions>`,
:ref:`generation <String Generating Generator Expressions>`, and
:ref:`transformation <String Transforming Generator Expressions>`
operations on strings.
* The :genex:`$<FILE_SET_EXISTS>` and :genex:`$<FILE_SET_PROPERTY>` generator
expressions were added to query file set existence and properties.
* The :genex:`$<SOURCE_EXISTS>` and :genex:`$<SOURCE_PROPERTY>` generator
expressions were added to query source file existence and properties.
CTest
-----
* The :module:`CTestCoverageCollectGCOV` module:
* Now supports ``TARBALL_COMPRESSION`` method ``LZMA``.
* Now supports ``TARBALL_COMPRESSION`` method ``LZMA2``
as an alias for ``XZ``.
* Now supports ``FROM_EXT`` with file extensions corresponding to
``LZMA`` and ``ZSTD`` compression.
CPack
-----
* :module:`CPack` gained the :variable:`CPACK_COMPRESSION_LEVEL`
variable to control the compression level used when creating
packages.
* The :cpack_gen:`CPack Archive Generator`:
* Now supports compression method specification for formats
``7zip`` and ``zip``.
* Gained a :variable:`CPACK_ARCHIVE_COMPRESSION_LEVEL` option to
control the compression level used when creating archive packages.
* Gained :variable:`CPACK_ARCHIVE_UID` and :variable:`CPACK_ARCHIVE_GID`
options to specify the UID and GID of archive entries, respectively.
The defaults are UID ``0`` and GID ``0``. See policy :policy:`CMP0206`.
* The :cpack_gen:`CPack DEB Generator` gained a new
:variable:`CPACK_DEBIAN_COMPRESSION_LEVEL` variable to control the
compression level used when creating Debian packages.
* The :cpack_gen:`CPack WIX Generator` now supports per-user installers
by setting :variable:`CPACK_WIX_INSTALL_SCOPE` to ``perUser``.
Deprecated and Removed Features
===============================
* The :variable:`CMAKE_ENABLE_EXPORTS` variable is deprecated in favor of
the :variable:`CMAKE_EXECUTABLE_ENABLE_EXPORTS` and
:variable:`CMAKE_SHARED_LIBRARY_ENABLE_EXPORTS` variables.
* The :command:`export(EXPORT)` command no longer allows certain
arguments to be missing or empty. See policy :policy:`CMP0208`.
Other Changes
=============
* The :option:`cmake -E tar <cmake-E tar>` command-line tool
and the :command:`file(ARCHIVE_EXTRACT)` command now reject archive
entries whose paths are absolute or contain ``..`` path traversal
components.
* The family of :option:`cmake --trace` and related commands now print "end"
commands for control structures: :command:`endblock`, :command:`endforeach`,
:command:`endfunction`, :command:`endif`, :command:`endmacro`, and
:command:`endwhile`.
* The :command:`file(CREATE_LINK)` command's ``COPY_ON_ERROR`` option,
when used with a directory, now copies directory content.
See policy :policy:`CMP0205`.
* The :command:`file(GET_RUNTIME_DEPENDENCIES)`
and :command:`install(RUNTIME_DEPENDENCY_SET)` commands now normalize
paths before matching filters. See policy :policy:`CMP0207`.
* The precompiled Linux ``aarch64`` binaries provided on
`cmake.org <https://cmake.org/download/>`_ now require GLIBC 2.28 or higher.
* The precompiled macOS binary provided on ``cmake.org`` for macOS 10.13+
now requires macOS 12 or newer for the :manual:`cmake-gui(1)` application.
The command-line tools still run on macOS 10.13.
* The precompiled Windows binaries provided on
`cmake.org <https://cmake.org/download/>`_ now require Windows 10 or higher.
Updates
=======
Changes made since CMake 4.3.0 include the following.
4.3.1
-----
* This version made no changes to documented features or interfaces.
Some implementation updates were made to support ecosystem changes
and/or fix regressions.