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 `. * 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 ` 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 `. * :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 _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_` target property and associated :variable:`CMAKE_FRAMEWORK_MULTI_CONFIG_POSTFIX_` 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 ``$`` and ``$`` :manual:`generator expressions ` were added. * The ``$`` and ``$`` :manual:`generator expressions ` were added. * :prop_sf:`OBJECT_OUTPUTS` now support :manual:`generator expressions `. * 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_` target property was added to tell :ref:`Visual Studio Generators` for VS 2010 and above to add metadata to non-built source files using ````. * 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.