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 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389
|
CMake 3.24 Release Notes
************************
.. only:: html
.. contents::
Changes made since CMake 3.23 include the following.
New Features
============
Presets
-------
* :manual:`cmake-presets(7)` files now support schema version ``5``.
* :manual:`cmake-presets(7)` files now support a ``${pathListSep}`` macro,
which expands to ``:`` or ``;`` based on the platform.
* :manual:`cmake-presets(7)` files gained support for specifying a
``testOutputTruncation`` field in test presets, which specifies the
truncation mode once the maximum test output size has been reached.
Generators
----------
* The :generator:`Green Hills MULTI` generator now generates build
rules to re-run CMake if any CMake files are updated.
* The :ref:`Visual Studio Generators` now support ``SYSTEM`` headers
when using VS 2019 Update 11 or later.
Command-Line
------------
* :manual:`cmake(1)` gained the :option:`--fresh <cmake --fresh>` command-line
option to remove any existing ``CMakeCache.txt`` file and associated ``CMakeFiles/``
directory, when configuring a build tree, thus starting a new configuration
as if the build tree were freshly created.
* :manual:`cmake(1)` gained the
:option:`--compile-no-warning-as-error <cmake --compile-no-warning-as-error>`
command-line option which causes the effects of the
:prop_tgt:`COMPILE_WARNING_AS_ERROR` target property and
:variable:`CMAKE_COMPILE_WARNING_AS_ERROR` variable to be ignored.
* The :manual:`cmake(1)` :option:`--trace=json-v1 <cmake --trace>` trace
format gained fields ``global_frame`` and ``line_end``.
* The :manual:`cmake(1)` :option:`-E <cmake -E>` commands :option:`cat <cmake-E cat>`
and :option:`env <cmake-E env>` learned to respect a double dash
(:option:`-- <cmake-E_env -->`) argument that acts as a delimiter indicating
the end of options. Any following arguments are treated as operands/positional
arguments, even if they begin with a dash ``-`` character.
* The :manual:`cmake(1)` :option:`-E tar <cmake-E tar>` command gained the
:option:`--touch <cmake-E_tar --touch>` option
to keep the current local timestamp instead of extracting file timestamps
from the archive.
Compilers
---------
* LLVM's `flang`_ Fortran compiler is now supported on some platforms,
with compiler id ``LLVMFlang``.
.. _`flang`: https://github.com/llvm/llvm-project/tree/main/flang
* ADSP compiler support (SHARC and Blackfin) now covers both CCES and
VDSP++ installations, with required configuration now done in the
compiler module itself rather than the ``Generic-ADSP`` platform module.
Platforms
---------
* A dedicated ``ADSP`` platform has been added
to replace the existing ``Generic-ADSP`` implementation.
This features automatic detection of the latest CCES/VDSP++ install
and compiler selection (``cc21k`` vs. ``ccblkfn``)
based off of the :variable:`CMAKE_SYSTEM_PROCESSOR` variable.
Commands
--------
* The :command:`cmake_host_system_information` command, on Windows,
gained a ``QUERY WINDOWS_REGISTRY`` mode.
See its :ref:`Query Windows registry` section.
* The :command:`cmake_language` command gained a new
``SET_DEPENDENCY_PROVIDER`` sub-command. When a dependency provider is set,
calls to :command:`find_package` and :command:`FetchContent_MakeAvailable`
can be redirected through a custom command, which can choose to fulfill the
request directly, modify how the request is processed, or leave it to be
fulfilled by the built-in implementation. See :ref:`dependency_providers`.
* The :command:`file(DOWNLOAD)` command gained options ``RANGE_START`` and
``RANGE_END`` to specify a range of bytes to download. This can be
useful for downloading parts of big binary files.
* The :command:`find_file`, :command:`find_path`, :command:`find_library`,
:command:`find_program`, and :command:`find_package` commands gained the
``NO_CMAKE_INSTALL_PREFIX`` option to control searching
:variable:`CMAKE_INSTALL_PREFIX`.
* The :command:`find_file`, :command:`find_path`, :command:`find_library`,
:command:`find_program`, and :command:`find_package` commands gained the
ability to specify which Windows Registry views must be queried.
* The :command:`find_package` command gained a ``GLOBAL`` option that
allows for the promotion of imported targets to global scope for the
duration of the :command:`find_package` call.
* The :command:`if` command gained the capability to compare paths by
using the ``PATH_EQUAL`` operator. See policy :policy:`CMP0139`.
Variables
---------
* The :variable:`CMAKE_COLOR_DIAGNOSTICS` variable was added to control
color diagnostics generated by compilers. This variable also controls
color build system messages with :ref:`Makefile Generators`, replacing
:variable:`CMAKE_COLOR_MAKEFILE`.
The :envvar:`CMAKE_COLOR_DIAGNOSTICS` environment variable was added to set
a default value for :variable:`CMAKE_COLOR_DIAGNOSTICS`.
* The :variable:`CMAKE_COMPILE_WARNING_AS_ERROR` variable and corresponding
:prop_tgt:`COMPILE_WARNING_AS_ERROR` target property were added to enable
compilation with a compiler-specific flag to treat warnings as errors,
such as ``-Werror``.
* The :variable:`CMAKE_CUDA_ARCHITECTURES` variable and associated
:prop_tgt:`CUDA_ARCHITECTURES` target property now support the
special ``native`` value to compile for the architectures(s)
of the host's GPU(s).
* The :variable:`CMAKE_FIND_PACKAGE_TARGETS_GLOBAL` variable was added to
toggle behavior of the :command:`find_package` command's new ``GLOBAL``
option.
* The :variable:`CMAKE_FIND_USE_INSTALL_PREFIX` variable was added to toggle
behavior of the :command:`find_file`, :command:`find_library`,
:command:`find_path`, :command:`find_package`, and :command:`find_program`
commands' new ``NO_CMAKE_INSTALL_PREFIX`` option.
* The :variable:`CMAKE_PROJECT_TOP_LEVEL_INCLUDES` variable was added to allow
injecting custom code at the site of the first :command:`project` call,
after the host and target platform details have been determined.
* The :variable:`CMAKE_TRY_COMPILE_NO_PLATFORM_VARIABLES` variable
was added to tell the :command:`try_compile` command not to
pass any platform variables to the test project.
* The :variable:`CMAKE_VERIFY_INTERFACE_HEADER_SETS` variable and
corresponding :prop_tgt:`VERIFY_INTERFACE_HEADER_SETS` target property
were added to enable build rules that verify all headers in header sets
can be used on their own.
* The :variable:`CMAKE_VS_NO_COMPILE_BATCHING` variable and corresponding
:prop_tgt:`VS_NO_COMPILE_BATCHING` target property were added to
tell :ref:`Visual Studio Generators` whether to disable compiler
parallelism and call the compiler with one source file at a time.
* The :variable:`CMAKE_WATCOM_RUNTIME_LIBRARY` variable and
:prop_tgt:`WATCOM_RUNTIME_LIBRARY` target property were introduced to
select the runtime library used by compilers targeting the Watcom ABI.
See policy :policy:`CMP0136`.
* The :variable:`CMAKE_XCODE_XCCONFIG` variable and corresponding
:prop_tgt:`XCODE_XCCONFIG` target property were added to tell
the :generator:`Xcode` generator to handle ``xcconfig`` files.
Properties
----------
* The :prop_tgt:`INTERFACE_LINK_LIBRARIES_DIRECT` and
:prop_tgt:`INTERFACE_LINK_LIBRARIES_DIRECT_EXCLUDE` target properties
were added to express usage requirements affecting a consumer's
direct link dependencies.
* The :prop_tgt:`INTERFACE_HEADER_SETS_TO_VERIFY` target property was
added to specify which header sets should be verified by
:prop_tgt:`VERIFY_INTERFACE_HEADER_SETS`.
* The :prop_tgt:`LINK_LIBRARIES` target property now supports
the :genex:`$<LINK_ONLY:...>` generator expression.
See policy :policy:`CMP0131`.
* The :prop_tgt:`VS_DOTNET_STARTUP_OBJECT` target property was added to
tell :ref:`Visual Studio Generators` which startup class shall be used
when the program or project is executed. This is necessary when more
than one ``static void Main(string[])`` function signature is available
in a managed .NET project.
Modules
-------
* The :module:`ExternalProject` module :command:`ExternalProject_Add`
command gained a new ``DOWNLOAD_EXTRACT_TIMESTAMP`` option for
controlling whether the timestamps of extracted contents are set to
match those in the archive when the ``URL`` download method is used.
Policy :policy:`CMP0135` was added to enable the option by default.
* The :module:`FetchContent` module and the :command:`find_package` command
now support integration capabilities:
* :command:`FetchContent_MakeAvailable` can now try to satisfy a dependency
by calling :command:`find_package` first. A new
:variable:`FETCHCONTENT_TRY_FIND_PACKAGE_MODE` variable controls whether
this is done by default for all dependencies, is opt-in per dependency,
or is disabled entirely.
* :command:`find_package` can be re-routed to call
:command:`FetchContent_MakeAvailable` instead. A new read-only
:variable:`CMAKE_FIND_PACKAGE_REDIRECTS_DIR` variable points to a
directory where config package files can be located to facilitate these
re-routed calls.
* The :module:`FindJNI` module now provides imported targets.
* The :module:`FindMatlab` module :command:`matlab_add_mex` function
gained a ``NO_IMPLICIT_LINK_TO_MATLAB_LIBRARIES`` option to disable
automatic linking of MATLAB libraries.
* The :module:`FindVulkan` module now supports components to select which
VulkanSDK tool and libraries to find in addition to the Vulkan SDK headers
and library.
* The :module:`FindZLIB` gained a new ``ZLIB_USE_STATIC_LIBS`` variable to
search only for static libraries.
Generator Expressions
---------------------
* The :genex:`LINK_LIBRARY` generator expression was added to manage how
libraries are specified during the link step.
The :variable:`CMAKE_<LANG>_LINK_LIBRARY_USING_<FEATURE>` and
:variable:`CMAKE_LINK_LIBRARY_USING_<FEATURE>` variables are used to define
features usable by the :genex:`LINK_LIBRARY` generator expression.
Moreover, the :prop_tgt:`LINK_LIBRARY_OVERRIDE` and
:prop_tgt:`LINK_LIBRARY_OVERRIDE_<LIBRARY>` target properties are
available to resolve incompatible features.
The :genex:`LINK_LIBRARY` generator expression can link frameworks in
various ways when targeting ``Apple`` platforms.
The following features were added:
* ``FRAMEWORK``
* ``NEEDED_FRAMEWORK``
* ``REEXPORT_FRAMEWORK``
* ``WEAK_FRAMEWORK``
The :genex:`LINK_LIBRARY` generator expression can link libraries in
various ways when targeting ``Apple`` platforms.
The following features were added:
* ``NEEDED_LIBRARY``
* ``REEXPORT_LIBRARY``
* ``WEAK_LIBRARY``
The :genex:`LINK_LIBRARY` generator expression gained the feature
``WHOLE_ARCHIVE`` to force load of all members in a static library.
This feature is supported on the following target platforms:
* all ``Apple`` variants
* ``Linux``
* all ``BSD`` variants
* ``SunOS``
* ``Windows``
* ``CYGWIN``
* ``MSYS``
* The :genex:`LINK_GROUP` generator expression was added to manage the
grouping of libraries during the link step. The
:variable:`CMAKE_<LANG>_LINK_GROUP_USING_<FEATURE>` and
:variable:`CMAKE_LINK_GROUP_USING_<FEATURE>` variables are used to define
features usable with the :genex:`LINK_GROUP` generator expression.
This release defines the ``RESCAN`` feature, which can be used to handle
circular references among static libraries when using toolchains for
Linux, BSD, SunOS and GNU toolchains for Windows.
* The :genex:`PATH` generator expression was added to manage paths.
* The :genex:`PATH_EQUAL` generator expression was added to manage path
comparisons.
* The :genex:`TARGET_BUNDLE_DIR_NAME` generator expression
was added to evaluate to the name of the bundle directory
for a given bundle target.
CTest
-----
* :manual:`ctest(1)` gained a
:option:`--test-output-truncation <ctest --test-output-truncation>` option
(and corresponding :variable:`CTEST_CUSTOM_TEST_OUTPUT_TRUNCATION` variable)
to specify the truncation mode once the maximum test output size has been
reached. Possible values are ``tail`` (default), ``middle`` or ``head``.
CPack
-----
* The :cpack_gen:`CPack WIX Generator` gained a new variable,
:variable:`CPACK_WIX_ARCHITECTURE`, to specify the installer architecture
in order to support computers running Windows for ARM.
* CPack now supports the :variable:`CPACK_THREADS` option for ``zstd``
compression when compiled with libarchive 3.6 or higher. It is
supported by official CMake binaries available on `cmake.org`_.
Deprecated and Removed Features
===============================
* The :module:`CPack` module no longer enables the SLA by default in the
:cpack_gen:`CPack DragNDrop Generator`. See policy :policy:`CMP0133`
and the :variable:`CPACK_DMG_SLA_USE_RESOURCE_FILE_LICENSE` variable.
* The deprecated :cpack_gen:`CPack PackageMaker Generator` has been removed.
* The :module:`FindGLUT` module no longer provides the undocumented
``GLUT_LIBRARY`` and ``GLUT_INCLUDE_PATH`` result variables.
* The :module:`FindVulkan` module no longer silently ignores unknown
components requested by a ``find_package(Vulkan REQUIRED ...)`` call.
With the addition of support for components, requests for unknown
components now produce an error.
Other Changes
=============
* CMake no longer sets environment variables like :envvar:`CC`, :envvar:`CXX`,
etc. when enabling the corresponding language during the first CMake run in
a build directory. See policy :policy:`CMP0132`.
* The :module:`CheckIPOSupported` module :command:`check_ipo_supported`
command now uses the caller's :variable:`CMAKE_<LANG>_FLAGS`
and :variable:`CMAKE_<LANG>_FLAGS_<CONFIG>` values.
See policy :policy:`CMP0138`.
* The :generator:`MSYS Makefiles` and :generator:`MinGW Makefiles`
generators, when a compiler is not explicitly specified, now select
the first compiler (of any name) found in directories listed by the
``PATH`` environment variable.
* The :command:`try_compile` command
:ref:`whole-project <Try Compiling Whole Projects>` signature
now propagates platform variables. See policy :policy:`CMP0137`.
* The :command:`while` command now diagnoses errors during condition
evaluation. See policy :policy:`CMP0130`.
* The precompiled macOS binaries provided on `cmake.org`_ no longer attach a
SLA to the ``.dmg`` packages. This was removed because macOS 12 deprecated
the tools used to attach ``.dmg`` resources.
* A precompiled Windows ``arm64`` binary is now provided on `cmake.org`_.
.. _`cmake.org`: https://cmake.org/download/
Updates
=======
Changes made since CMake 3.24.0 include the following.
3.24.1, 3.24.2
--------------
* These versions made no changes to documented features or interfaces.
Some implementation updates were made to support ecosystem changes
and/or fix regressions.
3.24.3
------
* The ``LLVMFlang`` Fortran compiler support added in 3.24.0 has been extended:
* It now supports mixed-language linking between Fortran and C or CXX.
* It now supports the GNU ABI (MinGW) on Windows, but not yet the MSVC ABI.
* Some implementation updates were made to support ecosystem changes
and/or fix regressions.
3.24.4
------
* This version made no changes to documented features or interfaces.
Some implementation updates were made to support ecosystem changes
and/or fix regressions.
|