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
|
CMake 3.21 Release Notes
************************
.. only:: html
.. contents::
Changes made since CMake 3.20 include the following.
New Features
============
Presets
-------
* :manual:`cmake-presets(7)` gained support for specifying the install prefix
in a configure preset.
* :manual:`cmake-presets(7)` gained support for conditional enabling of presets.
* :manual:`cmake-presets(7)` gained support for a ``${hostSystemName}`` macro.
* :manual:`cmake-presets(7)` gained support for omitting the ``generator`` and
``binaryDir`` fields.
Generators
----------
* The :generator:`Visual Studio 17 2022` generator was added.
* The :ref:`Makefile Generators` and the :generator:`Ninja` generator
learned to add linker launcher tools along with the linker for ``C``,
``CXX``, ``OBJC``, and ``OBJCXX`` languages.
See the :variable:`CMAKE_<LANG>_LINKER_LAUNCHER` variable
and :prop_tgt:`<LANG>_LINKER_LAUNCHER` target property for details.
Languages
---------
* CMake learned to support ``HIP`` as a first-class language that can be
enabled via the :command:`project` and :command:`enable_language` commands.
* :prop_tgt:`C_STANDARD`, :prop_tgt:`OBJC_STANDARD`, and the
:manual:`Compile Features <cmake-compile-features(7)>` functionality gained
support for C17 and C23.
* Source file extensions ``.ixx`` and ``.cppm`` are now treated as C++.
Command-Line
------------
* :manual:`cmake(1)` gained the :option:`--install-prefix <cmake --install-prefix>`
command-line option to specify the location of the install prefix.
* :manual:`cmake(1)` gained the :option:`--toolchain <cmake --toolchain>`
command-line option to specify a toolchain file.
* :manual:`cmake(1)` :option:`-E capabilities <cmake-E capabilities>` output,
for some generators, may now contain a ``supportedPlatforms`` field listing
platforms known to be supported in :variable:`CMAKE_GENERATOR_PLATFORM`.
* Messages printed to a terminal now may be colored by message type.
Compilers
---------
* The Fujitsu compiler is now supported using compiler id ``Fujitsu``
in traditional (``Trad``) mode, and compiler id ``FujitsuClang``
in ``Clang`` mode.
Platforms
---------
* CMake now supports the MSYS runtime environment, much like CYGWIN.
File-Based API
--------------
* The :manual:`cmake-file-api(7)` "codemodel" version 2 ``version`` field
has been updated to 2.3.
* The :manual:`cmake-file-api(7)` "codemodel" version 2 gained a
new "directory" object containing directory-level information.
This includes a list of installers generated by the :command:`install`
command.
Commands
--------
* The :command:`add_custom_command` command ``DEPFILE`` option:
* may now use
:manual:`generator expressions <cmake-generator-expressions(7)>`,
* is now supported by :ref:`Visual Studio Generators` for VS 2012
and above, and
* is now supported by the :generator:`Xcode` generator.
* The :command:`add_custom_command(TARGET)` command
(for :ref:`Build Events <add_custom_command(TARGET)>`)
gained support for resolving target-dependent generator expressions.
* The :command:`build_command` command gained a ``PARALLEL_LEVEL`` option.
* The :command:`file(COPY_FILE)` command was added to copy a single file.
* The :command:`file(GET_RUNTIME_DEPENDENCIES)` command gained new
``POST_INCLUDE_FILES`` and ``POST_EXCLUDE_FILES`` arguments.
* The :command:`file(REAL_PATH)` command gained the option ``EXPAND_TILDE`` to
replace any leading tilde with the path to the user's home directory.
* The :command:`file(RENAME)` command learned to optionally capture
failure in a result variable. It also gained a ``NO_REPLACE``
option to fail if the destination exists.
* The :command:`install` command gained a new ``IMPORTED_RUNTIME_ARTIFACTS``
mode, which can be used to install the runtime artifacts of imported targets.
* The :command:`install` command gained a new ``RUNTIME_DEPENDENCY_SET`` mode,
which can be used to install runtime dependencies using
:command:`file(GET_RUNTIME_DEPENDENCIES)`.
* The :command:`install(TARGETS)` command gained new ``RUNTIME_DEPENDENCIES``
and ``RUNTIME_DEPENDENCY_SET`` arguments, which can be used to install
runtime dependencies using :command:`file(GET_RUNTIME_DEPENDENCIES)`.
* The :command:`install(SCRIPT|CODE)` command
supports a new option ``ALL_COMPONENTS`` which allows
the corresponding code to run for every component of
a per component installation.
* The :command:`project` command now sets variables
:variable:`PROJECT_IS_TOP_LEVEL` and :variable:`<PROJECT-NAME>_IS_TOP_LEVEL`
to indicate whether it was called in a top-level ``CMakeLists.txt`` file.
Variables
---------
* The :envvar:`CMAKE_TOOLCHAIN_FILE` environment variable was added to
provide a default value for the :variable:`CMAKE_TOOLCHAIN_FILE` variable.
Properties
----------
* The :prop_dir:`IMPORTED_TARGETS` directory property was added to
get a list of :ref:`Imported Targets` created in the current
directory.
* The :prop_tgt:`XCODE_EMBED_APP_EXTENSIONS <XCODE_EMBED_<type>>` target property
was added to tell the :generator:`Xcode` generator to embed app extensions
such as iMessage sticker packs.
Aspects of the embedding can be customized with the
:prop_tgt:`XCODE_EMBED_APP_EXTENSIONS_PATH <XCODE_EMBED_<type>>`,
:prop_tgt:`XCODE_EMBED_APP_EXTENSIONS_CODE_SIGN_ON_COPY <XCODE_EMBED_<type>_CODE_SIGN_ON_COPY>` and
:prop_tgt:`XCODE_EMBED_APP_EXTENSIONS_REMOVE_HEADERS_ON_COPY <XCODE_EMBED_<type>_REMOVE_HEADERS_ON_COPY>`
properties.
Modules
-------
* The :module:`FindBLAS` and :module:`FindLAPACK` modules learned to support
the serial ``Fujitsu_SSL2`` and parallel ``Fujitsu_SSL2BLAMP`` libraries.
* The :module:`FindDevIL` module now provides imported targets.
* The :module:`FindIconv` module now has version support.
* The :module:`FindIntl` module now has version support.
* The :module:`FindMPI` module learned to support ``Fujitsu`` and
``FujitsuClang`` in both host and cross compiling modes.
* The :module:`FindMsys` module was added to find MSYS installations.
Like :module:`FindCygwin`, it is used automatically by some other
find modules to locate UNIX-style tools on Windows.
* The :module:`FindOpenMP` module learned to support ``Fujitsu`` and
``FujitsuClang``.
* The :module:`FindVulkan` module gained imported targets
``Vulkan::Headers`` and ``Vulkan::glslangValidator``.
* The :module:`UseJava` module command ``add_jar`` gained a ``RESOURCES``
option to allow explicit naming of resources with non-optional namespace.
* The :module:`UseSWIG` module use now standard library naming conventions
for the ``CSharp`` language. See policy :policy:`CMP0122`.
* The :module:`UseSWIG` module now supports using the ``swig`` tool to
generate implicit dependencies with the :generator:`Xcode` generator.
Generator Expressions
---------------------
* A new :genex:`TARGET_RUNTIME_DLLS` generator expression was added.
CTest
-----
* :manual:`ctest(1)` gained documentation for its ability to capture
:ref:`Additional Test Measurements`.
* :manual:`ctest(1)` learned to recognize files attached to a test at run time.
Previously it was only possible to attach files to tests at configure time
by using the :prop_test:`ATTACHED_FILES` or
:prop_test:`ATTACHED_FILES_ON_FAIL` test properties.
See :ref:`Additional Test Measurements` for more information.
* :manual:`ctest(1)` gained a :option:`--output-junit <ctest --output-junit>`
option to write test results to a JUnit XML file.
* The :command:`ctest_build` command gained a ``PARALLEL_LEVEL`` option.
CPack
-----
* The :cpack_gen:`CPack DragNDrop Generator` gained option
:variable:`CPACK_DMG_FILESYSTEM` to control the ``.dmg`` filesystem.
* The :cpack_gen:`CPack IFW Generator` now supports hyphens in names
given to :command:`cpack_ifw_configure_component` or
:command:`cpack_ifw_configure_component_group` as ``DEPENDS`` or
``DEPENDENCIES`` arguments. This requires QtIFW 3.1 or later.
* The :cpack_gen:`CPack NSIS Generator` gained a new
:variable:`CPACK_NSIS_EXECUTABLE` variable to specify the ``makensis``
executable to use instead of the default one.
* The :variable:`CPACK_CUSTOM_INSTALL_VARIABLES` variable was added to set
variables in ``cmake_install.cmake`` script invocations made by CPack.
Deprecated and Removed Features
===============================
* Undocumented :variable:`CMAKE_SYSTEM_NAME` version-stripping behavior has
been removed entirely. If it is set by a ``-D`` flag or by a
:manual:`toolchain file <cmake-toolchains(7)>`, it is left unaltered,
even if it still contains a version number.
Similar :variable:`CMAKE_HOST_SYSTEM_NAME` version-stripping behavior,
also undocumented, has been moved earlier, before :command:`project` or
:command:`enable_language` is called.
* ``ARMClang`` cpu/arch compile and link flags are no longer added
automatically based on the :variable:`CMAKE_SYSTEM_PROCESSOR`
variable or the undocumented ``CMAKE_SYSTEM_ARCH`` variable.
They must be specified explicitly. See policy :policy:`CMP0123`.
Other Changes
=============
* The :command:`find_file`, :command:`find_path`, :command:`find_program`,
and :command:`find_library` commands handle cache variables in the same way
regardless how they are defined. See policy :policy:`CMP0125` for details.
* The :command:`find_file`, :command:`find_path`, :command:`find_program`,
and :command:`find_library` commands gained the option ``NO_CACHE`` to store
find result in normal variable.
* The :command:`foreach` command now isolates loop variables in the loop scope.
See policy :policy:`CMP0124` for details.
* The :command:`list` command's ``GET``, ``INSERT``, ``SUBLIST``, and
``REMOVE_AT`` subcommands now error with invalid (i.e., non-integer) values
are given as any of their index arguments based on the setting of policy
:policy:`CMP0121`.
* The :command:`set(CACHE)` command no longer removes a normal variable
of the same name, if any. See policy :policy:`CMP0126`.
* :command:`target_link_libraries` calls referencing object libraries
via the :genex:`TARGET_OBJECTS` generator expression now place the
object files before all libraries on the link line, regardless of
their specified order. See documentation on
:ref:`Linking Object Libraries via \$\<TARGET_OBJECTS\>` for details.
* The :ref:`Ninja Generators` now pass source files and include directories
to the compiler using absolute paths. This makes diagnostic messages and
debug symbols more consistent, and matches the :ref:`Makefile Generators`.
* The :generator:`NMake Makefiles` generator now encodes the generated
makefiles as UTF-8 with a BOM when using ``nmake`` from VS 9 or above.
* The :ref:`Visual Studio Generators` for VS 2010 and above now place
per-source preprocessor definitions after target-wide preprocssor
definitions. This makes VS consistent with the :ref:`Ninja Generators`
and the :ref:`Makefile Generators`.
* The precompiled binaries provided on
`cmake.org <https://cmake.org/download/>`_ now support
``liblzma`` multi-threading. See the :variable:`CPACK_THREADS` and
:variable:`CPACK_ARCHIVE_THREADS` variables.
Updates
=======
Changes made since CMake 3.21.0 include the following.
3.21.1
------
* The :generator:`Visual Studio 17 2022` generator is now based on
"Visual Studio 2022 Preview 2". Previously it was based on "Preview 1.1".
3.21.2
------
* ``CUDA`` targets with :prop_tgt:`CUDA_SEPARABLE_COMPILATION` enabled are now
correctly generated in non-root directories.
* The :generator:`Visual Studio 17 2022` generator is now based on
"Visual Studio 2022 Preview 3.1". Previously it was based on "Preview 2".
3.21.3
------
* The :generator:`Visual Studio 17 2022` generator is now based on
"Visual Studio 2022 Preview 4". Previously it was based on "Preview 3.1".
* The AMD ROCm Platform ``hipcc`` compiler was identified by CMake 3.21.0
through 3.21.2 as a distinct compiler with id ``ROCMClang``. This has
been removed because it caused regressions. Instead:
* ``hipcc`` may no longer be used as a ``HIP`` compiler because it
interferes with flags CMake needs to pass to Clang. Use Clang directly.
* ``hipcc`` may once again be used as a ``CXX`` compiler, and is treated as
whatever compiler it selects underneath, as CMake 3.20 and below did.
3.21.4
------
* The :generator:`Visual Studio 17 2022` generator is now based on the
"Visual Studio 2022" release candidates. Previously it was based on
preview versions.
3.21.5, 3.21.6, 3.21.7
----------------------
These versions made no changes to documented features or interfaces.
Some implementation updates were made to support ecosystem changes
and/or fix regressions.
|