Help/release/3.10.rst
CMake 3.10 Release Notes
.. only:: html
.. contents::
Changes made since CMake 3.9 include the following.
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
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.
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.
CMAKE_DIRECTORY_LABELS variable was added to specify
labels for all tests in a directory.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.
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:
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.
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_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.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.
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.
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
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.
Changes made since CMake 3.10.0 include the following.
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:
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.