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
|
CMake 3.10 Release Notes
************************
.. only:: html
.. contents::
Changes made since CMake 3.9 include the following.
New Features
============
Platforms
---------
* The `flang`_ Fortran compiler is now supported, with compiler id ``Flang``.
* A new minimal platform file for ``Midipix`` was added.
* Support for the MSVC ARM64 architecture was added.
Visual Studio 2017 Update 4 and above offer an ARM64 toolchain.
* Support for the IAR ARM Compiler was improved.
.. _`flang`: https://github.com/flang-compiler/flang
Generators
----------
* The :ref:`Makefile Generators` and the :generator:`Ninja` generator learned
to add compiler launcher tools like ccache along with the compiler for the
``CUDA`` language (``C`` and ``CXX`` were supported previously). See the
:variable:`CMAKE_<LANG>_COMPILER_LAUNCHER` variable and
:prop_tgt:`<LANG>_COMPILER_LAUNCHER` target property for details.
* The :generator:`CodeBlocks` extra generator learned to optionally exclude
files from outside the project root directory from the generated project.
See the :variable:`CMAKE_CODEBLOCKS_EXCLUDE_EXTERNAL_FILES` variable.
Commands
--------
* The :command:`cmake_host_system_information` command learned more keys
to get information about the processor capabilities and the host OS
version.
* The :command:`configure_file` command learned to support indented
``# cmakedefine`` and ``# cmakedefine01``. Spaces and/or tabs between
the ``#`` character and the ``cmakedefine``/``cmakedefine01`` words
are now understood and preserved in the output.
* The :command:`execute_process` command gained a ``RESULTS_VARIABLE``
option to collect a list of results from all children in a pipeline
of processes when multiple ``COMMAND`` arguments are given.
* The :command:`include_guard` command was introduced to allow guarding
CMake scripts from being included more than once. The command supports
``DIRECTORY`` and ``GLOBAL`` options to adjust the corresponding include guard
scope. If no options given, include guard is similar to basic variable-based
check.
* The :command:`string` command learned a new ``PREPEND`` subcommand.
* The :command:`string(TIMESTAMP)` command now supports ``%A``
for full weekday name and ``%B`` for full month name.
Variables
---------
* A :variable:`CMAKE_DIRECTORY_LABELS` variable was added to specify
labels for all tests in a directory.
Properties
----------
* A :prop_tgt:`<LANG>_CPPCHECK` target property and supporting
:variable:`CMAKE_<LANG>_CPPCHECK` variable were introduced to tell
the :ref:`Makefile Generators` and the :generator:`Ninja` generator to
run ``cppcheck`` with the compiler for ``C`` and ``CXX`` languages.
* A :prop_dir:`LABELS` directory property was added to specify labels
for all targets and tests in a directory.
* A :prop_dir:`TEST_INCLUDE_FILES` directory property was added to
list any number of files to be included when running tests with
:manual:`ctest(1)`. This generalizes the :prop_dir:`TEST_INCLUDE_FILE`
property.
* The :prop_tgt:`VS_DOTNET_REFERENCEPROP_<refname>_TAG_<tagname>`
target property was added to support custom XML tags for reference
assemblies in C# targets.
* Source file properties :prop_sf:`VS_SHADER_OUTPUT_HEADER_FILE` and
:prop_sf:`VS_SHADER_VARIABLE_NAME` have been added to specify more
details of ``.hlsl`` sources with :ref:`Visual Studio Generators`.
Modules
-------
* The :module:`FindCurses` module gained a ``CURSES_NEED_WIDE`` option
to request the wide-character variant.
* The :module:`FindEXPAT` module now provides imported targets.
* The :module:`FindFreetype` module now provides imported targets.
* :module:`FindMPI` gained a number of new features, including:
* Language-specific components have been added to the module.
* Many more MPI environments are now supported.
* The environmental support for Fortran has been improved.
* A user now has fine-grained control over the MPI selection process,
including passing custom parameters to the MPI compiler.
* The version of the implemented MPI standard is now being exposed.
* MPI-2 C++ bindings can now be detected and also suppressed if so desired.
* The available Fortran bindings are now being detected and verified.
* Various MPI-3 information can be requested, including the library version
and Fortran capabilities of the individual bindings.
* Statically linked MPI implementations are supported.
* A :module:`FindOpenACC` module was added to detect compiler support
for OpenACC. Currently only supports PGI, GNU and Cray compilers.
* The :module:`FindOpenGL` module gained support for GLVND on Linux.
* The :module:`FindOpenMP` module gained support for
language-specific components.
* A :module:`FindPatch` module was added to find the ``patch``
command-line executable.
* The :module:`FindProtobuf` module :command:`protobuf_generate_cpp` command
gained a ``DESCRIPTORS`` option to generate descriptor files.
* The :module:`GoogleTest` module gained a new command
:command:`gtest_discover_tests` implementing dynamic (build-time) test
discovery. Unlike the source parsing approach, dynamic discovery executes
the test (in 'list available tests' mode) at build time to discover tests.
This is robust against unusual ways of labeling tests, provides much better
support for advanced features such as parameterized tests, and does not
require re-running CMake to discover added or removed tests within a test
executable. Note that a breaking change was made in CMake 3.10.3 to address
an ambiguity of the ``TIMEOUT`` keyword (see :ref:`Release Notes 3.10.3`).
* The :module:`InstallRequiredSystemLibraries` module gained support
for installing Intel compiler runtimes.
Autogen
-------
* When using :prop_tgt:`AUTOMOC` or :prop_tgt:`AUTOUIC` with a
multi configuration generator (e.g. :generator:`Xcode`),
included ``*.moc``, ``moc_*.cpp`` and ``ui_*.h`` files are generated in
``<AUTOGEN_BUILD_DIR>/include_<CONFIG>`` instead of
``<AUTOGEN_BUILD_DIR>/include``.
* When using :prop_tgt:`AUTOMOC` or :prop_tgt:`AUTOUIC`,
source files that are :prop_sf:`GENERATED` will be processed as well.
They were ignored by :prop_tgt:`AUTOMOC` and :prop_tgt:`AUTOUIC`
in earlier releases.
See policy :policy:`CMP0071`.
* When using :prop_tgt:`AUTOMOC`, CMake searches for the strings ``Q_OBJECT``,
``Q_GADGET`` or ``Q_NAMESPACE`` in a source file to determine if it needs
to be ``moc`` processed. The new :variable:`CMAKE_AUTOMOC_MACRO_NAMES`
variable and :prop_tgt:`AUTOMOC_MACRO_NAMES` target property may be set
to register additional strings (macro names) to search for.
* When using :prop_tgt:`AUTOMOC`, the new
:variable:`CMAKE_AUTOMOC_COMPILER_PREDEFINES` variable and
:prop_tgt:`AUTOMOC_COMPILER_PREDEFINES` target property specify whether
to enable or disable the generation of the compiler pre definitions file
``moc_predefs.h``.
CTest
-----
* A :variable:`CTEST_LABELS_FOR_SUBPROJECTS` CTest module variable and CTest
script variable were added to specify a list of labels that should be
treated as subprojects by CDash. To use this value in both the CTest module
and the ctest command line :ref:`Dashboard Client` mode (e.g. ``ctest -S``)
set it in the ``CTestConfig.cmake`` config file.
CPack
-----
* A :cpack_gen:`CPack FreeBSD Generator` was added for FreeBSD ``pkg(8)``.
* The :cpack_gen:`CPack DEB Generator` was enabled on Windows. While not
fully featured (due to the lack of external UNIX tools) this will allow
building basic cross-platform Debian packages.
* The :cpack_gen:`CPack DEB Generator` learned to set package release
version in ``Version`` info property.
See the :variable:`CPACK_DEBIAN_PACKAGE_RELEASE` variable.
* The :cpack_gen:`CPack DEB Generator` learned more strict package
version checking that complies with Debian rules.
* The :module:`CPackIFW` module :command:`cpack_ifw_configure_component` and
:command:`cpack_ifw_configure_component_group` commands gained a new
``REPLACES`` and ``CHECKABLE`` options.
* The :cpack_gen:`CPack IFW Generator` gained new
:variable:`CPACK_IFW_PACKAGE_FILE_EXTENSION` variable to customize
target binary format.
* The :cpack_gen:`CPack IFW Generator` gained new
:variable:`CPACK_IFW_REPOSITORIES_DIRECTORIES` variable to specify
additional repositories dirs that will be used to resolve and
repack dependent components. This feature is only available when
using QtIFW 3.1 or later.
* The :cpack_gen:`CPack RPM Generator` and :cpack_gen:`CPack DEB Generator`
learned to set the package epoch version.
See :variable:`CPACK_RPM_PACKAGE_EPOCH` and
:variable:`CPACK_DEBIAN_PACKAGE_EPOCH` variables.
Other
-----
* The :manual:`cmake(1)` ``-E`` mode gained support for ``sha1sum``,
``sha224sum``, ``sha256sum``, ``sha384sum``, and ``sha512sum``.
* The graphviz output now distinguishes among the different dependency types
``PUBLIC``, ``PRIVATE`` and ``INTERFACE`` and represents them in the output
graph as solid, dashed and dotted edges.
Deprecated and Removed Features
===============================
* Support for building CMake itself with C++98 compilers was dropped.
CMake is now implemented using C++11.
* Support for building CMake on HP-UX has been dropped pending better
support for C++11 and a port of libuv. See `CMake Issue 17137`_.
Use CMake 3.9 or lower instead for HP-UX support.
.. _`CMake Issue 17137`: https://gitlab.kitware.com/cmake/cmake/-/issues/17137
Other Changes
=============
* On FreeBSD the C++ compiler named ``c++`` is now the preferred default.
* The :command:`file(GENERATE)` command now interprets relative paths
given to its ``OUTPUT`` and ``INPUT`` arguments with respect to the
caller's current binary and source directories, respectively.
See policy :policy:`CMP0070`.
* The :command:`get_filename_component` ``PROGRAM`` mode semantics
have been revised to not tolerate unquoted spaces in the path
to the program while also accepting arguments. While technically
incompatible with the old behavior, it is expected that behavior
under typical use cases with properly-quoted command-lines has
not changed.
Updates
=======
Changes made since CMake 3.10.0 include the following.
3.10.1
------
* The :manual:`cmake-server(7)` ``codemodel`` response cross-references
field added by 3.10.0 has been dropped due to excessive memory usage.
Another approach will be needed to provide backtrace information.
.. _`Release Notes 3.10.3`:
3.10.3
------
* CMake 3.10.1 added a ``TIMEOUT`` option to :command:`gtest_discover_tests`
from the :module:`GoogleTest` module. That keyword clashed with the
``TIMEOUT`` test property, which is one of the common properties that
would be set with the command's ``PROPERTIES`` keyword, usually leading
to legal but unintended behavior. The keyword was changed to
``DISCOVERY_TIMEOUT`` in CMake 3.10.3 to address this problem. The
ambiguous behavior of the :command:`gtest_discover_tests` command's
``TIMEOUT`` keyword in 3.10.1 and 3.10.2 has not been preserved.
|