3.19.rst 11.5 KB
Newer Older
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
CMake 3.19 Release Notes
************************

.. only:: html

  .. contents::

Changes made since CMake 3.18 include the following.

* The :command:`add_test` command now (officially) supports whitespace and
  other special characters in the name for the test it creates.
  See policy :policy:`CMP0110`.

* The :prop_tgt:`OSX_ARCHITECTURES` target property is now respected for the
  ``ASM`` language.

* The :command:`set_property`, :command:`get_property`,
  and :command:`get_directory_property` commands' ``DIRECTORY``
  options now accept references to binary directory paths,
  such as the value of :variable:`CMAKE_CURRENT_BINARY_DIR`.

* :ref:`Interface Libraries` may now have source files added via
  :command:`add_library` or :command:`target_sources`.  Those
  with sources will be generated as part of the build system.

* The :module:`CheckSourceCompiles` module has been added to
  generalize :module:`CheckCSourceCompiles` and
  :module:`CheckCXXSourceCompiles` to more languages.

* The :module:`CheckSourceRuns` module has been added to
  generalize :module:`CheckCSourceRuns` and
  :module:`CheckCXXSourceRuns` to more languages.

* The :module:`CheckCompilerFlag` module has been added to
  generalize :module:`CheckCCompilerFlag` and
  :module:`CheckCXXCompilerFlag` to more languages.

* A :variable:`CMAKE_CLANG_VFS_OVERLAY` variable was added to tell
  Clang to use a VFS overlay to support the Windows SDK when
  cross-compiling from hosts with case-sensitive filesystems.

* The ``Clang`` compiler gained support for handling system include directories
  when running on Windows.

* The :manual:`cmake(1)` gained a ``-E create_hardlink`` command-line tool
  that can be used to create hardlinks between files.

* The :manual:`CMake GUI <cmake-gui(1)>` now has an environment variable editor.

* The :command:`cmake_language` command gained a ``DEFER`` mode to
  schedule command calls to occur at the end of processing a directory.

* :module:`CMakePackageConfigHelpers` module learned to manage version range.

* The :command:`cmake_path` command was added for operations on
  filesystem paths.

* :manual:`cmake(1)` and :manual:`cmake-gui(1)` now recognize
  ``CMakePresets.json`` and ``CMakeUserPresets.json`` files.

* The :variable:`CMAKE_<LANG>_COMPILER` variable may now be used to
  store "mandatory" compiler flags like the :envvar:`CC` and other environment variables.

* The :variable:`CMAKE_<LANG>_FLAGS_INIT` variable will now be considered during
  the compiler indentification check if other sources like :variable:`CMAKE_<LANG>_FLAGS`
  or :envvar:`CFLAGS` are not set.

* The :command:`configure_file` command gained a ``NO_SOURCE_PERMISSIONS``
  option to suppress copying the input file's permissions to the output file.

* :cpack_gen:`CPack External Generator` learned the :variable:`CPACK_EXTERNAL_BUILT_PACKAGES` variable.

* CPack learned the :variable:`CPACK_PRE_BUILD_SCRIPTS`, :variable:`CPACK_POST_BUILD_SCRIPTS`,
  and :variable:`CPACK_PACKAGE_FILES` variables.

* The :cpack_gen:`CPack WIX Generator` gained a
  :variable:`CPACK_WIX_CUSTOM_XMLNS` option to specify custom XML namespaces.

* :manual:`ctest(1)` gained support for cuda-memcheck as ``CTEST_MEMORYCHECK_COMMAND``.
  The different tools (memcheck, racecheck, synccheck, initcheck) supplied by
  cuda-memcheck can be selected by setting the appropriate flags using the
  ``CTEST_MEMORYCHECK_COMMAND_OPTIONS`` variable.
  The default flags are `--tool memcheck --leak-check full`.

* The :module:`CheckCompilerFlag` module was extended to
  support 'CUDA'.

* The :module:`CheckSourceCompiles` module was extended to
  support 'CUDA'.

* The :module:`CheckSourceRuns` module was extended to
  support 'CUDA'.

* The :module:`CheckLinkerFlag` module has been extended to
  support the validity of CUDA link flags.

* :prop_tgt:`CUDA_SEPARABLE_COMPILATION` is now supported when using Clang.

* If ``CUDA`` compiler detection fails with user-specified
  :variable:`CMAKE_CUDA_ARCHITECTURES` or :variable:`CMAKE_CUDA_HOST_COMPILER`
  an error is raised.

* Compiler ABI detection now handles NVCC-style ``-Werror`` flags.

* Scattered toolkit installations are now recognized when crosscompiling
  ``CUDA`` using Clang.
* :module:`FindCUDAToolkit` now finds scattered toolkit installations when
  crosscompiling.

* :ref:`Makefile Generators` no longer repeat custom commands from target
  dependencies.  See policy :policy:`CMP0113`.

* An explicit deprecation diagnostic was added for policy ``CMP0071``
  (``CMP0071`` and below were already deprecated).
  The :manual:`cmake-policies(7)` manual explains that the OLD behaviors
  of all policies are deprecated and that projects should port to the
  NEW behaviors.

* Compatibility with versions of CMake older than 2.8.12 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 :prop_tgt:`EXCLUDE_FROM_ALL` target property gained support for
  :manual:`generator expressions <cmake-generator-expressions(7)>`.

* The :command:`execute_process` command gained a ``COMMAND_ERROR_IS_FATAL``
  option to specify a fatal error.

* The :module:`ExternalProject` module handling of step target dependencies
  has been revised.  See policy :policy:`CMP0114`.

* The :manual:`cmake-file-api(7)` "codemodel" version 2 ``version`` field has
  been updated to 2.2.
* The :manual:`cmake-file-api(7)` "codemodel" version 2 "target" object gained
  a new ``languageStandard`` field in the ``compileGroups`` objects.

* The :command:`file(ARCHIVE_CREATE)` command gained a ``COMPRESSION_LEVEL``
  option to specify the compression level.

* Add :command:`file(CHMOD)` and :command:`file(CHMOD_RECURSE)` to
  set permissions of files and directories.

* The ``<file>`` argument is now optional for :command:`file(DOWNLOAD)`. If it
  is not specified, the file is not saved.

* The :command:`file(GENERATE)` command gained a new ``TARGET`` keyword to
  support resolving target-dependent generator expressions.

* The :command:`file` gained sub-command `REAL_PATH` to compute a path with
  symlinks resolved.

* The :module:`FindCUDAToolkit` module gained support for finding CUDA toolkits
  that do not contain ``nvcc``.

* The :command:`find_package` command learned to handle a version range.

* The :command:`find_program` command now requires permission to execute
  but not to read the file found.  See policy :policy:`CMP0109`.

* The :module:`FindPython3`, :module:`FindPython2` and :module:`FindPython`
  modules gained the capability to manage a version range.

* The :module:`FindSDL` module now provides:

  * imported target ``SDL::SDL``,

  * result variables ``SDL_LIBRARIES`` and ``SDL_INCLUDE_DIRS``,

  * version variables ``SDL_VERSION``, ``SDL_VERSION_MAJOR``
    ``SDL_VERSION_MINOR``, and ``SDL_VERSION_PATCH``.

* :module:`FindSWIG` module gains the capability to manage a version range.

* The :module:`FindTIFF` module gained a ``CXX`` component to
  find the ``tiffxx`` library containing C++ bindings.

* The :module:`FindVulkan` module gained a new output variable
  ``Vulkan_GLSLC_EXECUTABLE`` which contains the path to the
  GLSL SPIR-V compiler.

* The :module:`FindVulkan` module gained a new target
  ``Vulkan::glslc`` which contains the path to the
  GLSL SPIR-V compiler.

* The :module:`FindPackageHandleStandardArgs` module learned to handle
  version range. It also gained the ``find_package_check_version()`` command to
  check the validity of a version against version-related arguments of
  :command:`find_package` command.

* The :variable:`CMAKE_MFC_FLAG` variable now supports generator expressions.

* A new guide on :guide:`IDE integration <IDE Integration Guide>` has been added.

* An imported target with a missing location now fails during generation if the
  location is used.  See policy :policy:`CMP0111`.

* The ``--install`` argument of the :manual:`cmake(1)` command line tool gained a
  ``--default-directory-permissions`` argument.

* The :module:`CheckCompilerFlag` module was extended to
  support 'ISPC'.

* The :module:`CheckSourceCompiles` module was extended to
  support 'ISPC'.


* CMake learned to support ``ISPC`` as a first-class language that can be
  enabled via the :command:`project` and :command:`enable_language` commands.

* ``ISPC`` is currently supported by the :ref:`Makefile Generators`
  and the :generator:`Ninja` generator on Linux, macOS, and Windows.

* The Intel ISPC compiler (``ispc``) is supported.

* Building for macOS will now use the latest SDK available on the system,
  unless the user has explicitly chosen a SDK using :variable:`CMAKE_OSX_SYSROOT`.

  The deployment target or system macOS version will not affect
  the choice of SDK.

* macOS SDKs older than 10.5 are no longer supported.

* A new target property, :prop_tgt:`OPTIMIZE_DEPENDENCIES`, was added to
  avoid unnecessarily building dependencies for a static library.
* A new variable, :variable:`CMAKE_OPTIMIZE_DEPENDENCIES`, was added to
  initialize the :prop_tgt:`OPTIMIZE_DEPENDENCIES` target property.

* The :prop_tgt:`PCH_INSTANTIATE_TEMPLATES` target property was added to enable
  template instantiation in the precompiled header. This is enabled by default
  and offers a roughly 20% compile time improvement. Currently only supported
  by Clang 11.

* The following target-based generator expressions that query for directory or
  file name components no longer add a dependency on the evaluated target.
  See policy :policy:`CMP0112`.

    - ``TARGET_FILE_DIR``
    - ``TARGET_LINKER_FILE_BASE_NAME``
    - ``TARGET_LINKER_FILE_NAME``
    - ``TARGET_LINKER_FILE_DIR``
    - ``TARGET_SONAME_FILE_NAME``
    - ``TARGET_SONAME_FILE_DIR``
    - ``TARGET_PDB_FILE_NAME``
    - ``TARGET_PDB_FILE_DIR``
    - ``TARGET_BUNDLE_DIR``
    - ``TARGET_BUNDLE_CONTENT_DIR``

* :manual:`cmake-gui(1)` now requires Qt5. Support for compiling with Qt4 has
  been removed.

* The :manual:`cmake(1)` command-line option ``--warn-unused-vars`` has
  been removed and is now silently ignored.  The option has not worked
  correctly since CMake 3.3.

* The :command:`separate_arguments` command gained new ``PROGRAM`` option to
  search program.

* The :command:`string` command gained set of new ``JSON`` sub commands to provide JSON
  parsing capabilities.

* :module:`UseSWIG` module gains new source file properties ``OUTPUT_DIR`` and
  ``OUTFILE_DIR`` to manage output directories on per source basis.

* The :ref:`Visual Studio Generators` for Visual Studio 2015 and above gained
  support for the Visual Studio Tools for Android. This allows you to set
  :variable:`CMAKE_SYSTEM_NAME` to `Android` to generate `.vcxproj` files for
  the Android tools.

* A :variable:`CMAKE_VS_WINDOWS_TARGET_PLATFORM_VERSION_MAXIMUM` variable
  was added to tell the :ref:`Visual Studio Generators` what maximumm
  version of the Windows SDK to choose.

* The :prop_tgt:`WIN32_EXECUTABLE` target property now supports
  :manual:`generator expressions <cmake-generator-expressions(7)>`.

* The :generator:`Xcode` generator now uses the Xcode "new build system"
  when generating for Xcode 12.0 or higher.
  See the :variable:`CMAKE_XCODE_BUILD_SYSTEM` variable.
  One may use ``-T buildsystem=1`` to switch to the legacy build system.

* The Xcode generator gained support for linking libraries and frameworks
  via the *Link Binaries With Libraries* build phase instead of always by
  embedding linker flags directly.  This behavior is controlled by a new
  :prop_tgt:`XCODE_LINK_BUILD_PHASE_MODE` target property, which is
  initialized by a new :variable:`CMAKE_XCODE_LINK_BUILD_PHASE_MODE`
  variable.