summaryrefslogtreecommitdiffstats
path: root/Help/release/3.31.rst
blob: b738c3d3fa5beaaaac64a67d20a8c11c9611f785 (plain)
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
CMake 3.31 Release Notes
************************

.. only:: html

  .. contents::

Changes made since CMake 3.30 include the following.

New Features
============

Presets
-------

* :manual:`cmake-presets(7)` files may now include comments using the key
  ``$comment`` at any level within the JSON object to provide documentation.

* :manual:`cmake-presets(7)` files may now request graphviz output using
  the ``graphviz`` key in a configure preset.

Generators
----------

* The :ref:`Ninja Generators` and :ref:`Makefile Generators` now produce
  a ``codegen`` build target.  See policy :policy:`CMP0171`.  It drives a
  subset of the build graph sufficient to run custom commands created with
  :command:`add_custom_command`'s new ``CODEGEN`` option.

Command-Line
------------

* The :option:`cmake --workflow` mode now accepts a preset name as the first
  argument, allowing the simpler command line
  :option:`cmake --workflow \<preset\> <cmake--workflow --preset>`.

* The :option:`cmake -LR[A][H]` option was added to list cache entries
  whose names match a regular expression.

Compilers
---------

* The LFortran compiler is now supported with
  :variable:`compiler id <CMAKE_<LANG>_COMPILER_ID>` ``LFortran``.

Commands
--------

* The :command:`add_custom_command` command gained a ``CODEGEN`` option
  to mark a custom command's outputs as dependencies of a ``codegen`` target.
  See policy :policy:`CMP0171`.

* The :command:`cmake_pkg_config` command was added as an endpoint for using
  CMake's native pkg-config format parser. The only supported option in this
  release is ``EXTRACT``, which provides low-level access to the values
  produced by parsing a pkg-config file. For most users, this is not yet a
  suitable replacement for the :module:`FindPkgConfig` module.

* The :command:`file(ARCHIVE_CREATE)` command gained a ``WORKING_DIRECTORY``
  option to specify a working directory for the archiving process.

* The :command:`install(FILES)` and :command:`install(DIRECTORY)` commands'
  ``TYPE`` argument gained support for a ``LIBEXEC`` type.

Variables
---------

* The :variable:`CMAKE_AIX_SHARED_LIBRARY_ARCHIVE` variable and corresponding
  :prop_tgt:`AIX_SHARED_LIBRARY_ARCHIVE` target property were added to
  create shared libraries on AIX as shared library archives.

* The :variable:`CMAKE_EXPORT_BUILD_DATABASE` variable, a corresponding
  :envvar:`CMAKE_EXPORT_BUILD_DATABASE` environment variable, and an
  :prop_tgt:`EXPORT_BUILD_DATABASE` target property, were added to
  enable exporting C++ module compile commands.
  This is only supported with :ref:`Ninja Generators`.

* The :variable:`CMAKE_HOST_EXECUTABLE_SUFFIX` variable was added to
  provide the suffix for executable names on the host platform.

* The :variable:`CMAKE_<LANG>_HOST_COMPILER_ID` and
  :variable:`CMAKE_<LANG>_HOST_COMPILER_VERSION` variables were added,
  where ``<LANG>`` is either ``CUDA`` or ``HIP``.  They are populated
  when :variable:`CMAKE_<LANG>_COMPILER_ID` is ``NVIDIA`` to identify
  NVCC's host compiler.

* The :variable:`CMAKE_<LANG>_STANDARD_LINK_DIRECTORIES` variable was added.
  Toolchain files can set this variable to control which link library directory
  paths are always passed to the compiler for the specified language.

* The :variable:`CMAKE_LINK_LIBRARIES_STRATEGY` variable and
  corresponding :prop_tgt:`LINK_LIBRARIES_STRATEGY` target
  property were added to optionally specify the strategy
  CMake uses to generate link lines.

Properties
----------

* The :prop_tgt:`MACOSX_FRAMEWORK_BUNDLE_NAME <MACOSX_FRAMEWORK_INFO_PLIST>`
  target property was added to set the ``CFBundleName`` key in an Apple
  :prop_tgt:`FRAMEWORK`'s ``Info.plist`` file.

* The :prop_tgt:`UNITY_BUILD` target property now supports the
  ``CUDA`` language.

* The :prop_tgt:`VS_FRAMEWORK_REFERENCES` target property was added
  to tell :ref:`Visual Studio Generators` to add framework references.

Modules
-------

* Check modules now support a ``CMAKE_REQUIRED_LINK_DIRECTORIES`` variable.
  The following modules gained this support:

  * :module:`CMakePushCheckState`
  * :module:`CheckCCompilerFlag`
  * :module:`CheckCSourceCompiles`
  * :module:`CheckCSourceRuns`
  * :module:`CheckCXXCompilerFlag`
  * :module:`CheckCXXSourceCompiles`
  * :module:`CheckCXXSourceRuns`
  * :module:`CheckCXXSymbolExists`
  * :module:`CheckCompilerFlag`
  * :module:`CheckFortranCompilerFlag`
  * :module:`CheckFortranFunctionExists`
  * :module:`CheckFortranSourceCompiles`
  * :module:`CheckFortranSourceRuns`
  * :module:`CheckFunctionExists`
  * :module:`CheckIncludeFile`
  * :module:`CheckIncludeFileCXX`
  * :module:`CheckIncludeFiles`
  * :module:`CheckOBJCCompilerFlag`
  * :module:`CheckLibraryExists`
  * :module:`CheckOBJCCompilerFlag`
  * :module:`CheckOBJCSourceCompiles`
  * :module:`CheckOBJCSourceRuns`
  * :module:`CheckOBJCXXCompilerFlag`
  * :module:`CheckOBJCXXSourceCompiles`
  * :module:`CheckOBJCXXSourceRuns`
  * :module:`CheckPrototypeDefinition`
  * :module:`CheckSourceCompiles`
  * :module:`CheckSourceRuns`
  * :module:`CheckStructHasMember`
  * :module:`CheckSymbolExists`
  * :module:`CheckTypeSize`
  * :module:`CheckVariableExists`

* The :module:`CMakePackageConfigHelpers` module's
  :command:`generate_apple_platform_selection_file` function
  gained support for iOS Mac Catalyst.

* The :module:`GoogleTest` module :command:`gtest_discover_tests` command
  gained a new ``DISCOVERY_EXTRA_ARGS`` keyword.  It allows extra arguments
  to be appended to the command line when querying for the list of tests.

* The :module:`FindCUDAToolkit` module now provides a ``CUDA::nvml_static``
  target.

* The :module:`FindOpenMP` module gained support for the ``CUDA`` language.

CTest
-----

* The :command:`ctest_submit` command and :option:`ctest -T Submit <ctest -T>`
  step now verify TLS server certificates for connections to ``https://`` URLs
  by default.  See the :variable:`CTEST_TLS_VERIFY` variable for details.

* The :command:`ctest_submit` command and :option:`ctest -T Submit <ctest -T>`
  step now require TLS 1.2 or higher for connections to ``https://`` URLs by
  default.  See the :variable:`CTEST_TLS_VERSION` variable for details.

CPack
-----

* The :cpack_gen:`CPack DEB Generator` gained a
  :variable:`CPACK_DEBIAN_PACKAGE_MULTIARCH` option
  to support multi-arch packages.

* The :cpack_gen:`CPack IFW Generator` gained the new
  :variable:`CPACK_IFW_PACKAGE_PRODUCT_IMAGE_URLS` variable to
  specify images associated with entries of
  :variable:`CPACK_IFW_PACKAGE_PRODUCT_IMAGES`.
  This feature is available for QtIFW 4.0 and newer.

* The :cpack_gen:`CPack RPM Generator` gained support for ``zstd`` as a
  :variable:`CPACK_RPM_COMPRESSION_TYPE` value.

* The :module:`CPack` module enables per-machine installation by default
  in the :cpack_gen:`CPack WIX Generator`.  See policy :policy:`CMP0172`
  and the :variable:`CPACK_WIX_INSTALL_SCOPE` variable.

Deprecated and Removed Features
===============================

* Compatibility with versions of CMake older than 3.10 is now deprecated
  and will be removed from a future version.  Calls to
  :command:`cmake_minimum_required` or :command:`cmake_policy` that set
  the policy version to an older value now issue a deprecation diagnostic.

* The :module:`CMakeFindFrameworks` module has been deprecated via
  :policy:`CMP0173`. Projects should use :command:`find_library` instead.

* The :generator:`Visual Studio 12 2013` generator has been removed.

Other Changes
=============

* When static libraries on link lines are de-duplicated (by policy
  :policy:`CMP0156`), the first occurrence is now kept on all platforms.
  See policy :policy:`CMP0179`.

* Empty list elements in the :prop_tgt:`TEST_LAUNCHER` and
  :prop_tgt:`CROSSCOMPILING_EMULATOR` target properties are now preserved by:

  * The :command:`add_test` command.
  * The :command:`ExternalData_Add_Test` command from the
    :module:`ExternalData` module.
  * The :command:`gtest_add_tests` and :command:`gtest_discover_tests`
    commands from the :module:`GoogleTest` module.
    Empty list elements after the ``EXTRA_ARGS`` keyword of these
    two commands are also now preserved.

  See policy :policy:`CMP0178`.

* The :command:`execute_process` command's ``ENCODING`` option,
  meaningful on Windows, now defaults to ``UTF-8``.
  See policy :policy:`CMP0176`.

* The :command:`file(DOWNLOAD)` and :command:`file(UPLOAD)` commands now
  verify TLS server certificates for connections to ``https://`` URLs by
  default.  See the :variable:`CMAKE_TLS_VERIFY` variable for details.
  This change was made without a policy so that users are protected
  even when building projects that have not been updated.
  Users may set the :envvar:`CMAKE_TLS_VERIFY` environment
  variable to ``0`` to restore the old default.

* The :command:`file(DOWNLOAD)` and :command:`file(UPLOAD)` commands now
  require TLS 1.2 or higher for connections to ``https://`` URLs by default.
  See the :variable:`CMAKE_TLS_VERSION` variable for details.

* The :command:`file(GET_RUNTIME_DEPENDENCIES)` command was updated
  to more closely match the dynamic loader's behavior on Linux.

* The :command:`install` command's ``DESTINATION`` arguments are
  now :ref:`normalized <Normalization>`, with the exception
  of ``INCLUDES DESTINATION`` arguments in :command:`install(TARGETS)`.
  See policy :policy:`CMP0177`.

* The :command:`project` command now always sets
  :variable:`<PROJECT-NAME>_SOURCE_DIR`, :variable:`<PROJECT-NAME>_BINARY_DIR`,
  and :variable:`<PROJECT-NAME>_IS_TOP_LEVEL` as both normal variables and
  cache entries.  See policy :policy:`CMP0180`.