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
|
CMake 3.18 Release Notes
************************
.. only:: html
.. contents::
Changes made since CMake 3.17 include the following.
New Features
============
Languages
---------
* The ``CUDA`` language can now be compiled using Clang on non-Windows
platforms. Separable compilation is not yet supported on any platform.
Command-Line
------------
* :manual:`cmake(1)` gained support for profiling of CMake scripts through
the parameters ``--profiling-output`` and ``--profiling-format``.
* :manual:`cmake(1)` gained a ``cat`` command line
option that can be used to concatenate files and print them
on standard output.
Commands
--------
* The :command:`add_library` and :command:`add_executable` commands
learned to create :ref:`Alias Targets` referencing non-``GLOBAL``
:ref:`Imported Targets`.
* 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.
* 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:`file` command gained the ``ARCHIVE_CREATE`` and
``ARCHIVE_EXTRACT`` subcommands to expose the :manual:`cmake(1)` ``-E tar``
functionality to CMake scripting code.
* The :command:`file(CONFIGURE)` subcommand was created in order to 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 :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.
* The :command:`get_property` command 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` command gained the ``DIRECTORY``
and ``TARGET_DIRECTORY`` options to get a property from the
provided directory scope.
* The :command:`list` operation ``SORT`` gained the ``NATURAL`` sort
option to sort using natural order (see ``strverscmp(3)`` manual).
* The :command:`set_property` command 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` command gained the ``DIRECTORY``
and ``TARGET_DIRECTORY`` options to set properties in the provided
directory scopes.
* The :command:`string` command learned a new ``HEX`` sub-command, which
converts strings into their hexadecimal representation.
Variables
---------
* A :variable:`CMAKE_CUDA_ARCHITECTURES` variable was added to specify
CUDA output architectures. Users are encouraged to use this instead of
specifying options manually, as this approach is compiler-agnostic.
The variable is initialized automatically when
:variable:`CMAKE_CUDA_COMPILER_ID <CMAKE_<LANG>_COMPILER_ID>` is ``NVIDIA``.
The variable is used to initialize the new :prop_tgt:`CUDA_ARCHITECTURES`
target property. See policy :policy:`CMP0104`.
* 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.
Properties
----------
* The :prop_tgt:`CUDA_ARCHITECTURES` target property was added to specify
CUDA output architectures. Users are encouraged to use this instead of
specifying options manually, as this approach is compiler-agnostic.
The property is initialized by the new :variable:`CMAKE_CUDA_ARCHITECTURES`
variable. See policy :policy:`CMP0104`.
* 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 :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.
* The :prop_sf:`OBJECT_OUTPUTS` source file property now supports
:manual:`generator expressions <cmake-generator-expressions(7)>`.
* The :prop_tgt:`PCH_WARN_INVALID` target property was added to allow the
removal of the precompiled header invalid warning.
* The :prop_tgt:`UNITY_BUILD_MODE` target property was added to tell
generators which algorithm to use for grouping included source
files.
* 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.
Modules
-------
* The :module:`CheckLinkerFlag` module has been added to provide a
facility to check validity of link flags.
* The :module:`ExternalProject` module :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 :module:`FetchContent` module :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 :module:`FindBLAS` module now provides an imported target.
* The :module:`FindCUDAToolkit` module:
* gained the variable
``CUDAToolkit_LIBRARY_ROOT``, which is the directory containing the
``nvvm`` directory and ``version.txt``.
* uses toolkit and library root found during ``CUDA`` compiler detection.
* The :module:`FindLAPACK` module now provides an imported target.
* The :module:`FindPython3`, :module:`FindPython2` and :module:`FindPython`
modules:
* gained the possibility to create per-artifact cache variables for
interactive editing in :manual:`cmake-gui(1)` and :manual:`ccmake(1)`.
* gained sub-components ``Development.Module`` and
``Development.Embed`` under the ``Development`` component.
* gained the capability to specify which Python implementations to find,
including ``IronPython`` and ``PyPy``.
* 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 :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. A new
``CMAKE_GTEST_DISCOVER_TESTS_DISCOVERY_MODE`` variable can be used
to change the default globally.
* gained a new optional parameter ``XML_OUTPUT_DIR``. When set the
JUnit XML test results are stored in that directory.
* The :module:`FindLibXslt` module now provides imported targets.
* 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
Generator Expressions
---------------------
* The :genex:`$<DEVICE_LINK:...>` and :genex:`$<HOST_LINK:...>`
generator expressions were added to manage device and host link steps.
* The :genex:`$<LINK_LANGUAGE:...>` and :genex:`$<LINK_LANG_AND_ID:...>`
generator expressions were added.
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.
* The :module:`CTestCoverageCollectGCOV` module
:command:`ctest_coverage_collect_gcov` command gained a
``TARBALL_COMPRESSION`` option to control compression of the
tarball of collected results.
CPack
-----
* 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 :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 RPM Generator` gained
:variable:`CPACK_RPM_PRE_TRANS_SCRIPT_FILE` and
:variable:`CPACK_RPM_POST_TRANS_SCRIPT_FILE`
variables to specify pre- and post-transaction scripts.
Other
-----
* :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.
* :manual:`ccmake(1)` learned to read a :envvar:`CCMAKE_COLORS`
environment variable to customize colors.
* The :manual:`Compile Features <cmake-compile-features(7)>` functionality
is now aware of the availability of C11 features in MSVC 19.27 and 19.28,
including support for the ``c_restrict``, ``c_static_assert`` features and
the ``-std:c11`` flag.
Deprecated and Removed Features
===============================
* 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.
Other Changes
=============
* 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 :prop_tgt:`LINK_OPTIONS` and :prop_tgt:`INTERFACE_LINK_OPTIONS` target
properties are now used for the device link step.
See policy :policy:`CMP0105`.
* Creation of an ``ALIAS`` target overwriting an existing target now raises an
error. See policy :policy:`CMP0107`.
* Linking a target to itself through an alias now raises an error.
See policy :policy:`CMP0108`.
* The :module:`FindPackageHandleStandardArgs` module option ``REQUIRED_VARS``
is now optional if ``HANDLE_COMPONENTS`` is specified.
* The :command:`source_group` command now also recognizes forward slashes
as subgroup delimiters, not just backslashes.
* :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.
* 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 :manual:`cmake-file-api(7)` "codemodel" version 2 ``version`` field has
been updated to 2.1.
* The :manual:`cmake-file-api(7)` "codemodel" version 2 "target" object gained
a new ``precompileHeaders`` field in the ``compileGroups`` objects.
Updates
=======
Changes made since CMake 3.18.0 include the following.
3.18.1
------
* The :generator:`Xcode` generator, when :variable:`CMAKE_OSX_ARCHITECTURES`
is not defined, now selects ``$(NATIVE_ARCH_ACTUAL)`` as the default
architecture (the Xcode ``ARCHS`` setting). This is needed for Xcode 12
to select the host's architecture, which older versions of Xcode did
by default.
* In CMake 3.18.0 the :command:`add_test` command learned to support
special characters in test names. This was accidentally left out of
its release notes. Unfortunately the fix breaks existing projects
that were using manual quoting or escaping to work around the prior
limitation. This fix has been reverted in 3.18.1, but may be
re-introduced in future versions of CMake with a policy for compatibility.
3.18.2
------
* The default value of :variable:`CMAKE_AUTOMOC_PATH_PREFIX` was changed to
``OFF`` because this feature can break existing projects that have
identically named header files in different include directories.
This restores compatibility with behavior of CMake 3.15 and below.
The default was also changed to ``OFF`` in 3.16.9 and 3.17.5.
* The :manual:`Compile Features <cmake-compile-features(7)>` functionality
was updated for MSVC 19.27 as mentioned above (``c_restrict``).
3.18.3
------
* The :manual:`Compile Features <cmake-compile-features(7)>` functionality
was updated for MSVC 19.28 as mentioned above (``c_static_assert``).
|