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
|
CMake 3.18 Release Notes
************************
.. only:: html
.. contents::
Changes made since CMake 3.17 include the following.
* :command:`add_library` and :command:`add_executable` gain the capability
to create an ``ALIAS`` to
non-``GLOBAL`` :ref:`Imported Target <Imported Targets>`.
* Creation of an ``ALIAS`` target overwriting an existing target now raise an
error. See policy :policy:`CMP0107`.
* :manual:`ccmake(1)` learned to read a :envvar:`CCMAKE_COLORS`
environment variable to customize colors.
* New :module:`CheckLinkerFlag` module has been added to provide a facility to
check validity of link flags.
* :manual:`cmake-gui(1)` now populates its generator selection
widget default value from the :envvar:`CMAKE_GENERATOR` environment
variable. Additionally, environment variables
:envvar:`CMAKE_GENERATOR_PLATFORM` and :envvar:`CMAKE_GENERATOR_TOOLSET`
are used to populate their respective widget defaults.
* The :command:`cmake_language()` command was added for meta-operations on
scripted or built-in commands, starting with a mode to ``CALL`` other
commands, and ``EVAL CODE`` to inplace evaluate a CMake script.
* :manual:`cmake(1)` gained a ``cat`` command line
option that can be used to concatenate files and print them
on standard output.
* The :cpack_gen:`CPack RPM Generator` gained
:variable:`CPACK_RPM_PRE_TRANS_SCRIPT_FILE`
:variable:`CPACK_RPM_POST_TRANS_SCRIPT_FILE`
variables to specify pre- and post-trans scripts.
* The :module:`CTestCoverageCollectGCOV` module
:command:`ctest_coverage_collect_gcov` function gained a
``TARBALL_COMPRESSION`` option to control compression of the
tarball of collected results.
* :manual:`ctest(1)` now logs environment variables that it sets for each test,
either due to the :prop_test:`ENVIRONMENT` property or the
:ref:`resource allocation <ctest-resource-allocation>` feature, and submits
this log to CDash. It does not log environment variables that were set
outside of CTest.
* :manual:`ctest(1)` gained a new :variable:`CTEST_RESOURCE_SPEC_FILE`
variable, which can be used to specify a
:ref:`resource specification file <ctest-resource-specification-file>`.
* :manual:`ctest(1)` gained a ``--stop-on-failure`` option,
which can be used to stop running the tests once one has failed.
* The :command:`ctest_test` command gained a ``STOP_ON_FAILURE`` option
which can be used to stop running the tests once one has failed.
* :variable:`CMAKE_CUDA_ARCHITECTURES` is now initialized when
:variable:`CMAKE_CUDA_COMPILER_ID <CMAKE_<LANG>_COMPILER_ID>` is ``NVIDIA``.
Empty :prop_tgt:`CUDA_ARCHITECTURES` raises an error. See policy
:policy:`CMP0104`.
* Added :prop_tgt:`CUDA_ARCHITECTURES` target property for specifying CUDA
output architectures. Users are encouraged to use this instead of specifying
options manually, as this approach is compiler-agnostic.
* The ``CUDA`` language now supports Clang as a compiler.
* When building CMake itself from source and not using a system-provided
libcurl, HTTP/2 support is now enabled for commands supporting
network communication via ``http(s)``, such as :command:`file(DOWNLOAD)`,
:command:`file(UPLOAD)`, and :command:`ctest_submit`.
The precompiled binaries provided on ``cmake.org`` now support HTTP/2.
* The :module:`Documentation` module has been deprecated via
:policy:`CMP0106`. This module was essentially VTK code that CMake should
not be shipping anymore.
* An explicit deprecation diagnostic was added for policy ``CMP0070``
and policy ``CMP0071`` (``CMP0069`` 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.
* the :prop_tgt:`LINK_OPTIONS` and :prop_tgt:`INTERFACE_LINK_OPTIONS` target
properties are now used for the device link step. See policy :policy:`CMP0105`.
* The :command:`execute_process` command gained the ``ECHO_OUTPUT_VARIABLE``
and ``ECHO_ERROR_VARIABLE`` options.
* The :command:`export` command now raise an error if used multiple times with
same ``FILE`` without ``APPEND``. See policy :policy:`CMP0103`.
* The :command:`ExternalProject_Add` command gained a new
``GIT_REMOTE_UPDATE_STRATEGY`` keyword. This can be used to specify how
failed rebase operations during a git update should be handled.
The ``CMAKE_EP_GIT_REMOTE_UPDATE_STRATEGY`` variable was also added as a
global default and is honored by both the :module:`ExternalProject` and
:module:`FetchContent` modules.
* The :command:`FetchContent_Declare` command now supports a ``SOURCE_SUBDIR``
option. It can be used to direct :command:`FetchContent_MakeAvailable`
to look in a different location for the ``CMakeLists.txt`` file.
* The :command:`file` command gained the ``ARCHIVE_{CREATE|EXTRACT}`` subcommands.
These subcommands will replicate the :manual:`cmake(1)` ``-E tar`` functionality in
CMake scripting code.
* The :command:`file(CONFIGURE)` subcommand was created in order replicate the
:command:`configure_file` functionality without resorting to a pre-existing
file on disk as input. The content is instead passed as a string.
* The :command:`file(UPLOAD)` command gained ``TLS_VERIFY`` and ``TLS_CAINFO``
options to control server certificate verification.
* The :module:`FindBLAS` module now provides an imported target.
* The :module:`FindLAPACK` module now provides an imported target.
* The :module:`FindPython3`, :module:`FindPython2` and :module:`FindPython`
modules gained the possibility to create artifacts cache variables for
interactive edition.
* The :module:`FindPython3`, :module:`FindPython2` and :module:`FindPython`
modules gained sub-components ``Development.Module`` and
``Development.Embed`` for ``Development`` component.
* The :module:`FindPython3`, :module:`FindPython2` and :module:`FindPython`
modules gained the capability to specify which implementations to search for.
* The :module:`FindPython3`, :module:`FindPython2` and :module:`FindPython`
modules support now the ``IronPython`` implementation on all platforms.
* The :module:`FindPython3`, :module:`FindPython2` and :module:`FindPython`
modules gained the capability to handle ``PyPy`` product.
* The :module:`FindRuby` module input and output variables were all renamed
from ``RUBY_`` to ``Ruby_`` for consistency with other find modules.
Input variables of the old case will be honored if provided, and output
variables of the old case are always provided.
* The :module:`FindSWIG` module now accepts target languages as ``COMPONENTS``
and ``OPTIONAL_COMPONENTS`` arguments to ``find_package``.
* The :prop_tgt:`Fortran_PREPROCESS` target property and
:prop_sf:`Fortran_PREPROCESS` source-file property were added to
control preprocessing of Fortran source files.
* The :module:`FindPackageHandleStandardArgs` module option ``REQUIRED_VARS``
is now optional if ``HANDLE_COMPONENTS`` is specified.
* The :prop_tgt:`FRAMEWORK_MULTI_CONFIG_POSTFIX_<CONFIG>` target property
and associated :variable:`CMAKE_FRAMEWORK_MULTI_CONFIG_POSTFIX_<CONFIG>`
variable were created to allow adding a postfix to the name of a
framework file name when using a multi-config generator.
* To manage device and host link steps, the ``$<DEVICE_LINK:...>`` and
``$<HOST_LINK:...>``
:manual:`generator expressions <cmake-generator-expressions(7)>` were added.
* The ``$<LINK_LANGUAGE:...>`` and ``$<LINK_LANG_AND_ID:...>``
:manual:`generator expressions <cmake-generator-expressions(7)>` were added.
* :prop_sf:`OBJECT_OUTPUTS` now support :manual:`generator expressions <cmake-generator-expressions(7)>`.
* The :module:`GoogleTest` module :command:`gtest_discover_tests` command
gained a new ``DISCOVERY_MODE`` option to control when the test
discovery step is run. It offers a new ``PRE_TEST`` setting to
run the discovery at test time instead of build time.
* The :module:`GoogleTest` module :command:`gtest_discover_tests` command
gained a new optional parameter ``XML_OUTPUT_DIR``. When set the JUnit XML
test results are stored in that directory.
* The :prop_tgt:`UNITY_BUILD_MODE` target property was added to tell
generators which algorithm to use for grouping included source
files.
* The :module:`FindLibXslt` module now provides imported targets.
* The :command:`list` operation ``SORT`` gained the ``NATURAL`` sort
option to sort using natural order (see ``strverscmp(3)`` manual).
* On Windows, the :generator:`Ninja` and :generator:`Ninja Multi-Config`
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 :cpack_gen:`CPack NSIS Generator` gained a new variable
:variable:`CPACK_NSIS_MANIFEST_DPI_AWARE` to declare that the
installer is DPI-aware.
* The :cpack_gen:`CPack Archive Generator`'s ``TXZ`` format learned the
:variable:`CPACK_ARCHIVE_THREADS` variable to enable parallel compression.
Requires support in the ``liblzma`` used by CMake.
* The :variable:`CMAKE_PCH_WARN_INVALID` variable was added to initialize the
:prop_tgt:`PCH_WARN_INVALID` target property to allow the removal of the
precompiled header invalid warning.
* Add support for profiling of CMake scripts through the parameters
``--profiling-output`` and ``--profiling-format``. These options can
be used by users to gain insight into the performance of their scripts.
The first supported output format is ``google-trace`` which is a format
supported by Google Chrome's ``about:tracing`` tab.
* The :command:`find_program`, :command:`find_library`, :command:`find_path`
and :command:`find_file` commands gained a new ``REQUIRED`` option that will
stop processing with an error message if nothing is found.
* Linking a target to itself through an alias now raise an error.
See policy :policy:`CMP0108`.
* The :command:`set_property` with the ``SOURCE`` scope gained the
``DIRECTORY`` and ``TARGET_DIRECTORY`` options to set properties
in the provided directory scopes.
* The :command:`set_source_files_properties` gained the ``DIRECTORY``
and ``TARGET_DIRECTORY`` options to set properties in the provided
directory scopes.
* The :command:`get_property` with ``SOURCE`` scope gained the
``DIRECTORY`` and ``TARGET_DIRECTORY`` options to get a property
from the provided directory scope.
* The :command:`get_source_file_property` gained the ``DIRECTORY``
and ``TARGET_DIRECTORY`` options to get a property from the
provided directory scope.
* The :command:`source_group` command now also recognizes forward slashes
as subgroup delimiters, not just backslashes.
* The :command:`string` command learned a new ``HEX`` sub-command, which
converts strings into their hexadecimal representation.
* The :module:`UseSWIG` module now supports Fortran as a target language if
the ``SWIG_EXECUTABLE`` is SWIG-Fortran_.
.. _`SWIG-Fortran`: https://github.com/swig-fortran/swig
* The :prop_tgt:`VS_SOURCE_SETTINGS_<tool>` target property was added
to tell :ref:`Visual Studio Generators` for VS 2010 and above to add
metadata to non-built source files using ``<tool>``.
* The :prop_sf:`VS_SETTINGS` source file property was added to tell
:ref:`Visual Studio Generators` for VS 2010 and above to add
metadata to a non-built source file.
* The :prop_tgt:`VS_PLATFORM_TOOLSET` target property was added to tell
:ref:`Visual Studio Generators` for VS 2010 and above to override
the platform toolset.
* The :prop_tgt:`VS_SOLUTION_DEPLOY` target property was added to tell
:ref:`Visual Studio Generators` for VS 2010 and above to mark a
target for deployment even when not building for Windows Phone/Store/CE.
|