1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323
|
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)` :option:`--build <cmake --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
:option:`--resolve-package-references <cmake--build --resolve-package-references>`
command-line option to control the behavior on one invocation.
* The :manual:`cmake(1)` command line tool gained a
:option:`--debug-find-pkg <cmake --debug-find-pkg>`
option to enable debug messages under specific :command:`find_package`
calls.
* The :manual:`cmake(1)` command line tool gained a
:option:`--debug-find-var <cmake --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
and associated ``fileSetName``, ``fileSetType``, ``fileSetDirectories``,
and ``fileSetTarget`` fields.
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.distribution.dist.in`` template used by the
:cpack_gen:`CPack productbuild Generator` and
CPack ``PackageMaker`` generator was updated to use a new
``CPACK_APPLE_PKG_INSTALLER_CONTENT`` variable for its main content.
This replaced the previously undocumented and now deprecated
``CPACK_PACKAGEMAKER_CHOICES`` variable.
* 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.
* The previously undocumented ``CPACK_PACKAGEMAKER_CHOICES`` variable used in
the ``CPack.distribution.dist.in`` template has been replaced by a new
``CPACK_APPLE_PKG_INSTALLER_CONTENT`` variable. This only affects projects
that were providing their own custom ``CPack.distribution.dist.in`` template
file, but still relied on ``CPACK_PACKAGEMAKER_CHOICES`` being set. Those
custom template files should be updated to use
``CPACK_APPLE_PKG_INSTALLER_CONTENT`` instead, or to fully define all the
template file's contents without relying on substitution of either variable.
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 :genex:`$<DEVICE_LINK:...>` and :genex:`$<HOST_LINK:...>`
generator expressions.
* 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.
3.23.2
------
* The ``CPACK_PACKAGEMAKER_CHOICES`` variable used in the
``CPack.distribution.dist.in`` template file was replaced by a new
``CPACK_APPLE_PKG_INSTALLER_CONTENT`` variable in CMake 3.23.0.
This broke projects that provided their own template file but still
expected the ``CPACK_PACKAGEMAKER_CHOICES`` variable to be defined.
The old ``CPACK_PACKAGEMAKER_CHOICES`` variable is now also set to the
same content as it was before, but it is formally deprecated.
3.23.3, 3.23.4, 3.23.5
----------------------
* These versions made no changes to documented features or interfaces.
Some implementation updates were made to support ecosystem changes
and/or fix regressions.
|