|
|
|
CMake 3.23 Release Notes
|
|
|
|
************************
|
|
|
|
|
|
|
|
.. only:: html
|
|
|
|
|
|
|
|
.. contents::
|
|
|
|
|
|
|
|
Changes made since CMake 3.22 include the following.
|
|
|
|
|
|
|
|
New Features
|
|
|
|
============
|
|
|
|
|
|
|
|
Presets
|
|
|
|
-------
|
|
|
|
|
|
|
|
* :manual:`cmake-presets(7)` files now support schema version ``4``.
|
|
|
|
|
|
|
|
* :manual:`cmake-presets(7)` files now have an optional ``include`` field,
|
|
|
|
which allows the files to include other files.
|
|
|
|
|
|
|
|
* :manual:`cmake-presets(7)` files now support a ``${fileDir}`` macro, which
|
|
|
|
contains the directory containing the preset file.
|
|
|
|
|
|
|
|
* :manual:`cmake-presets(7)` gained support for specifying the
|
|
|
|
``resolvePackageReferences`` command line option in a build preset to control
|
|
|
|
restoration behavior of package references from external package managers.
|
|
|
|
Currently this is only supported by the Visual Studio generator to support
|
|
|
|
restoring packages from NuGet. Other generators ignore this option.
|
|
|
|
|
|
|
|
Generators
|
|
|
|
----------
|
|
|
|
|
|
|
|
* The :ref:`Visual Studio Generators` for VS 2019 and above learned to
|
|
|
|
support .NET SDK-style project files (``.csproj``) for C# projects.
|
|
|
|
See the :prop_tgt:`DOTNET_SDK` target property and corresponding
|
|
|
|
:variable:`CMAKE_DOTNET_SDK` variable. :command:`add_custom_command`
|
|
|
|
is not yet supported in .NET SDK-style projects.
|
|
|
|
|
|
|
|
* The :ref:`Visual Studio Generators` for VS 2017 and above learned to
|
|
|
|
use portable instances of Visual Studio not known to the VS installer.
|
|
|
|
See the :variable:`CMAKE_GENERATOR_INSTANCE` variable.
|
|
|
|
|
|
|
|
Command-Line
|
|
|
|
------------
|
|
|
|
|
|
|
|
* The :manual:`cmake(1)` ``--build`` command, when used with
|
|
|
|
:ref:`Visual Studio Generators` on projects that set the
|
|
|
|
:prop_tgt:`VS_PACKAGE_REFERENCES` target property, now automatically
|
|
|
|
restores package references from NuGet. The cache variable
|
|
|
|
:variable:`CMAKE_VS_NUGET_PACKAGE_RESTORE` may be set to toggle this behavior
|
|
|
|
in a build tree. Use the ``--resolve-package-references=<on|off|only>``
|
|
|
|
command-line option to control the behavior on one invocation.
|
|
|
|
|
|
|
|
* The :manual:`cmake(1)` command line tool gained a ``--debug-find-pkg=``
|
|
|
|
option to enable debug messages under specific :command:`find_package`
|
|
|
|
calls.
|
|
|
|
|
|
|
|
* The :manual:`cmake(1)` command line tool gained a ``--debug-find-var=``
|
|
|
|
option to enable debug messages for ``find_*`` calls that use specific
|
|
|
|
result variables.
|
|
|
|
|
|
|
|
Compilers
|
|
|
|
---------
|
|
|
|
|
|
|
|
* The IBM Open XL C/C++ compiler, based on LLVM, is now supported with
|
|
|
|
compiler id ``IBMClang``.
|
|
|
|
|
|
|
|
* The MCST LCC compiler is now supported with compiler id ``LCC``.
|
|
|
|
See policy :policy:`CMP0129`.
|
|
|
|
|
|
|
|
File-Based API
|
|
|
|
--------------
|
|
|
|
|
|
|
|
* The :manual:`cmake-file-api(7)` "codemodel" version 2 ``version`` field
|
|
|
|
has been updated to ``2.4``.
|
|
|
|
|
|
|
|
* The :manual:`cmake-file-api(7)` "codemodel" version 2 ``directory``
|
|
|
|
object ``installers`` field gained a new ``fileSet`` installer type.
|
|
|
|
|
|
|
|
Commands
|
|
|
|
--------
|
|
|
|
|
|
|
|
* The :command:`define_property` command gained a new
|
|
|
|
``INITIALIZE_FROM_VARIABLE`` option to cause a target property to be
|
|
|
|
initialized from a variable when a target is created.
|
|
|
|
|
|
|
|
* The :command:`install(TARGETS)` command gained a new ``FILE_SET`` argument,
|
|
|
|
which can be used to install header file sets associated with a target.
|
|
|
|
|
|
|
|
* The :command:`string(TIMESTAMP)` and :command:`file(TIMESTAMP)` commands now
|
|
|
|
support the ``%f`` specifier for microseconds.
|
|
|
|
|
|
|
|
* The :command:`target_sources` command gained a new ``FILE_SET`` mode, which
|
|
|
|
can be used to add headers as header-only source files of a target.
|
|
|
|
|
|
|
|
Variables
|
|
|
|
---------
|
|
|
|
|
|
|
|
* The :variable:`CMAKE_CUDA_ARCHITECTURES` variable and associated
|
|
|
|
:prop_tgt:`CUDA_ARCHITECTURES` target property now support the
|
|
|
|
``all``, and ``all-major`` values for CUDA toolkit 7.0+.
|
|
|
|
|
|
|
|
* The :variable:`CMAKE_IGNORE_PREFIX_PATH` and
|
|
|
|
:variable:`CMAKE_SYSTEM_IGNORE_PREFIX_PATH` variables were added
|
|
|
|
to tell the :command:`find_package`, :command:`find_program`,
|
|
|
|
:command:`find_library`, :command:`find_path`, and :command:`find_file`
|
|
|
|
commands to ignore specified prefixes.
|
|
|
|
|
|
|
|
* The :variable:`CMAKE_LINK_LIBRARIES_ONLY_TARGETS` variable and
|
|
|
|
corresponding :prop_tgt:`LINK_LIBRARIES_ONLY_TARGETS` target
|
|
|
|
property were added to optionally require that all link items
|
|
|
|
that can be target names are actually names of existing targets.
|
|
|
|
|
|
|
|
Properties
|
|
|
|
----------
|
|
|
|
|
|
|
|
* The :prop_tgt:`HEADER_SETS` and :prop_tgt:`INTERFACE_HEADER_SETS` read-only
|
|
|
|
target properties were added to list header sets associated with a target.
|
|
|
|
|
|
|
|
* The :prop_tgt:`HEADER_SET` and :prop_tgt:`HEADER_SET_<NAME>` target
|
|
|
|
properties were added to list files in the default header set
|
|
|
|
and named header sets, respectively.
|
|
|
|
|
|
|
|
* The :prop_tgt:`HEADER_DIRS` and :prop_tgt:`HEADER_DIRS_<NAME>` target
|
|
|
|
properties were added to specify the base directories of the default
|
|
|
|
header set and named header sets, respectively.
|
|
|
|
|
|
|
|
* The :prop_tgt:`IMPORTED_NO_SYSTEM` target property was added to
|
|
|
|
specify that an :ref:`Imported Target <Imported Targets>` should
|
|
|
|
not be treated as a system library (i.e. its include directories
|
|
|
|
are not automatically ``SYSTEM``).
|
|
|
|
|
|
|
|
* The :prop_tgt:`XCODE_EMBED_PLUGINS <XCODE_EMBED_<type>>` target property
|
|
|
|
was added to tell the :generator:`Xcode` generator what targets to put in
|
|
|
|
the ``Embed PlugIns`` build phase.
|
|
|
|
|
|
|
|
* The :prop_tgt:`XCODE_SCHEME_ENABLE_GPU_FRAME_CAPTURE_MODE` target property
|
|
|
|
and supporting :variable:`CMAKE_XCODE_SCHEME_ENABLE_GPU_FRAME_CAPTURE_MODE`
|
|
|
|
variable were added to tell the :generator:`Xcode` generator to enable
|
|
|
|
specifying the Xcode scheme option property ``GPU Frame Capture``.
|
|
|
|
|
|
|
|
Modules
|
|
|
|
-------
|
|
|
|
|
|
|
|
* The :module:`CheckPIESupported` module now supports the ``OBJC``,
|
|
|
|
``OBJCXX``, ``CUDA``, and ``HIP`` languages. It also now honors
|
|
|
|
:variable:`CMAKE_SYSROOT` and :variable:`CMAKE_OSX_SYSROOT`.
|
|
|
|
|
|
|
|
* The :module:`ExternalProject` module's :command:`ExternalProject_Add`
|
|
|
|
command gained support for a ``USES_TERMINAL_PATCH`` option to give
|
|
|
|
the patch step exclusive terminal access.
|
|
|
|
|
|
|
|
* The :module:`FindCUDAToolkit` module now provides a target for
|
|
|
|
``libcufft_static_nocallback``, if found.
|
|
|
|
|
|
|
|
* The :module:`FindGLUT` module now provides the ``GLUT_INCLUDE_DIRS``
|
|
|
|
result variable to conform with naming conventions documented in the
|
|
|
|
:manual:`cmake-developer(7)` manual. This supersedes the legacy
|
|
|
|
``GLUT_INCLUDE_DIR`` variable.
|
|
|
|
|
|
|
|
* The :module:`FindGTest` module now provides a target for GMock, if found.
|
|
|
|
|
|
|
|
* The :module:`FindVulkan` module now provides a ``Vulkan_VERSION`` result
|
|
|
|
variable reporting the version number.
|
|
|
|
|
|
|
|
CTest
|
|
|
|
-----
|
|
|
|
|
|
|
|
* :manual:`ctest(1)` gained a new :variable:`CTEST_SUBMIT_INACTIVITY_TIMEOUT`
|
|
|
|
variable, which can be used to specify a timeout for submission inactivity.
|
|
|
|
|
|
|
|
CPack
|
|
|
|
-----
|
|
|
|
|
|
|
|
* The :cpack_gen:`CPack productbuild Generator` gained the new
|
|
|
|
:variable:`CPACK_PRODUCTBUILD_DOMAINS`,
|
|
|
|
:variable:`CPACK_PRODUCTBUILD_DOMAINS_ANYWHERE`,
|
|
|
|
:variable:`CPACK_PRODUCTBUILD_DOMAINS_USER`, and
|
|
|
|
:variable:`CPACK_PRODUCTBUILD_DOMAINS_ROOT` variables for
|
|
|
|
adding the domains element to the Distribution XML. With these variables,
|
|
|
|
it is now possible to install products to the user's home directory
|
|
|
|
without requiring administrative privileges.
|
|
|
|
|
|
|
|
* The :cpack_gen:`CPack productbuild Generator` gained a new variable,
|
|
|
|
:variable:`CPACK_PRODUCTBUILD_IDENTIFIER`, used to customize the unique
|
|
|
|
product identifier associated with the product.
|
|
|
|
|
|
|
|
* The :cpack_gen:`CPack IFW Generator` gained the new
|
|
|
|
:variable:`CPACK_IFW_ARCHIVE_FORMAT` and
|
|
|
|
:variable:`CPACK_IFW_ARCHIVE_COMPRESSION` variables for setting the
|
|
|
|
format used when packaging new component data archives, and choosing
|
|
|
|
the compression level used.
|
|
|
|
These features are available for QtIFW 4.2 and newer.
|
|
|
|
|
|
|
|
* The :cpack_gen:`CPack IFW Generator` gained new
|
|
|
|
:variable:`CPACK_IFW_PACKAGE_DISABLE_COMMAND_LINE_INTERFACE` variable to
|
|
|
|
prevent the user from passing any consumer command to the installer, like
|
|
|
|
``install``, ``update``, and ``remove``.
|
|
|
|
This feature is available for QtIFW 4.0 and newer.
|
|
|
|
|
|
|
|
* The :cpack_gen:`CPack IFW Generator` gained the new
|
|
|
|
:variable:`CPACK_IFW_PACKAGE_PRODUCT_IMAGES` variable for adding a
|
|
|
|
list of images to be shown on the ``PerformInstallationPage``.
|
|
|
|
This feature is available for QtIFW 4.0 and newer.
|
|
|
|
|
|
|
|
* The :cpack_gen:`CPack IFW Generator` gained the new
|
|
|
|
:variable:`CPACK_IFW_PACKAGE_RUN_PROGRAM`,
|
|
|
|
:variable:`CPACK_IFW_PACKAGE_RUN_PROGRAM_ARGUMENTS`, and
|
|
|
|
:variable:`CPACK_IFW_PACKAGE_RUN_PROGRAM_DESCRIPTION` variables for
|
|
|
|
executing a command after the installer is done if the user accepts
|
|
|
|
the action. This feature is available for QtIFW 4.0 and newer.
|
|
|
|
|
|
|
|
* The :cpack_gen:`CPack IFW Generator` gained the new
|
|
|
|
:variable:`CPACK_IFW_PACKAGE_SIGNING_IDENTITY` variable for specifying a
|
|
|
|
code signing identity to be used for signing the generated app bundle.
|
|
|
|
This feature is available on macOS only, and for QtIFW 3.0 and newer.
|
|
|
|
|
|
|
|
* The :cpack_gen:`CPack WIX Generator` gained a new variable,
|
|
|
|
:variable:`CPACK_WIX_SKIP_WIX_UI_EXTENSION`, to skip the inclusion
|
|
|
|
of WixUIExtensions.
|
|
|
|
|
|
|
|
Deprecated and Removed Features
|
|
|
|
===============================
|
|
|
|
|
|
|
|
* :manual:`cmake(1)` now warns when multiple source paths are specified,
|
|
|
|
as in ``cmake -S src1 src2``. This has never been officially documented
|
|
|
|
or supported, but older versions accidentally accepted multiple source
|
|
|
|
paths and used the last path specified. Update scripts to avoid
|
|
|
|
passing multiple source path arguments.
|
|
|
|
|
|
|
|
* The :manual:`cpack(1)` undocumented ``OSXX11`` generator has been removed.
|
|
|
|
|
|
|
|
Other Changes
|
|
|
|
=============
|
|
|
|
|
|
|
|
* The :cpack_gen:`CPack DragNDrop Generator` no longer attaches
|
|
|
|
:variable:`CPACK_RESOURCE_FILE_LICENSE` as the license agreement in
|
|
|
|
the generated ``.dmg`` unless explicitly activated by a
|
|
|
|
:variable:`CPACK_DMG_SLA_USE_RESOURCE_FILE_LICENSE` option.
|
|
|
|
In CMake projects, the :module:`CPack` module enables the option
|
|
|
|
by default for compatibility.
|
|
|
|
|
|
|
|
* ``CUDA`` targets may now enable both :prop_tgt:`CUDA_SEPARABLE_COMPILATION`
|
|
|
|
and :prop_tgt:`CUDA_PTX_COMPILATION`.
|
|
|
|
|
|
|
|
* ``CUDA`` compiler detection now:
|
|
|
|
|
|
|
|
* issues an error in all cases when it's unable to compute the default
|
|
|
|
architecture(s) if required (see :policy:`CMP0104`),
|
|
|
|
|
|
|
|
* handles ``OFF`` for :variable:`CMAKE_CUDA_ARCHITECTURES` on Clang,
|
|
|
|
|
|
|
|
* supports the theoretical case of multiple default architectures, and
|
|
|
|
|
|
|
|
* tries to detect invalid architectures and issue an error.
|
|
|
|
|
|
|
|
* ``CUDA`` with Clang now implements policy :policy:`CMP0105` and
|
|
|
|
the ``$<DEVICE_LINK:...>`` and ``$<HOST_LINK:...>``
|
|
|
|
:manual:`generator expressions <cmake-generator-expressions(7)>`.
|
|
|
|
|
|
|
|
* The :command:`define_property` command's ``BRIEF_DOCS`` and ``FULL_DOCS``
|
|
|
|
arguments are now optional.
|
|
|
|
|
|
|
|
* :manual:`ccmake(1)` may now be enabled on Windows when building
|
|
|
|
CMake from source. This is experimental, and so is not included
|
|
|
|
in official distributions.
|
|
|
|
|
|
|
|
Updates
|
|
|
|
=======
|
|
|
|
|
|
|
|
Changes made since CMake 3.23.0 include the following.
|
|
|
|
|
|
|
|
3.23.1
|
|
|
|
------
|
|
|
|
|
|
|
|
* The :command:`target_sources` ``FILE_SET`` feature added in CMake 3.23.0
|
|
|
|
does not yet place header files properly in Apple :prop_tgt:`FRAMEWORK`
|
|
|
|
targets. Pending further work in a future version of CMake, it is now
|
|
|
|
an error to add a ``FILE_SET`` of type ``HEADERS`` to such targets on
|
|
|
|
Apple platforms.
|
|
|
|
|
|
|
|
* The :prop_tgt:`HEADER_SETS` and :prop_tgt:`INTERFACE_HEADER_SETS` target
|
|
|
|
properties added in CMake 3.23.0 are now read-only records of the header
|
|
|
|
sets created by the :command:`target_sources` command.
|