| 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 ``crossReferences`` |
| 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. |