CMake 3.15 Release Notes ************************ .. only:: html .. contents:: Changes made since CMake 3.14 include the following. * The :command:`execute_process` command gained a `COMMAND_ECHO` option and supporting :variable:`CMAKE_EXECUTE_PROCESS_COMMAND_ECHO` variable to enable echoing of the command-line string before execution. * New target property :prop_tgt:`ADDITIONAL_CLEAN_FILES` and directory property :prop_dir:`ADDITIONAL_CLEAN_FILES` were added. They allow to register additional files that should be removed during the clean stage. * Directory property :prop_dir:`ADDITIONAL_MAKE_CLEAN_FILES` was marked deprecated. The new directory property :prop_dir:`ADDITIONAL_CLEAN_FILES` should be used instead. * IBM Clang-based XL compilers that define ``__ibmxl__`` now use the compiler id ``XLClang`` instead of ``XL``. See policy :policy:`CMP0089`. * :command:`add_library` command ``ALIAS`` option learned to support import libraries of the ``UNKNOWN`` type. * AppleClang compiler have learned how to compile C++20. * Support for the Clang-based ARM compiler was added with compiler id ``ARMClang``. * The ``Clang`` compiler variant on Windows that targets the MSVC ABI but has a GNU-like command line is now supported. * The variable :variable:`CMAKE_AUTOMOC_RELAXED_MODE` is considered deprecated. Support still exists but will be removed in future versions. * The :manual:`cmake(1)` ``--build`` tool ``--target`` parameter gained support for multiple targets, e.g. ``cmake --build . --target Library1 Library2``. * The :manual:`cmake(1)` ``-E tar`` tool now continues adding files to an archive, even if some of the files aren't readable. This behavior is more consistent with the classic ``tar`` tool. * The :manual:`cmake(1)` ``-E tar`` tool now parses all flags, and if an invalid flag was provided, a warning is issued. * The :manual:`cmake(1)` ``-E tar`` tool now displays an error if no action flag was specified, along with a list of possible actions: ``t`` (list), ``c`` (create) or ``x`` (extract). * The :manual:`cmake(1)` ``-E tar`` tool allow for extract (``-x``) or list (``-t``) only specific files or directories. To select pathnames append a space-separated list of file names or directories. When extracting selected files or directories, you must provide their exact pathname, as printed by list (``-t``) * The :manual:`cmake(1)` ``-E tar`` tool now support Zstandard compression algorithm with ``--zstd`` option. Zstandard was designed to give a compression ratio comparable to that of the DEFLATE (zip) algorithm, but faster, especially for decompression. * A :variable:`CMAKE_FRAMEWORK` variable was added to initialize the :prop_tgt:`FRAMEWORK` property on all targets. * A new ``--install`` option was added to :manual:`cmake(1)`. This may be used after building a project to run installation without using the generated build system or the native build tool. * The :command:`cmake_parse_arguments` command gained an additional ``_KEYWORDS_MISSING_VALUES`` output variable to report keyword arguments that were given by the caller with no values. * The :manual:`cmake(1)` ``--target`` parameter gained shorter version ``-t``, e.g. ``cmake --build . -t Library1 Library2`` is equivalant to ``cmake --build . --target Library1 Library2``. * The :cpack_gen:`CPack IFW Generator` gained a new :variable:`CPACK_IFW_PACKAGE_STYLE_SHEET` variable to customize the installer stylesheet. * The :command:`ctest_submit` command learned a new option: ``BUILD_ID``. This can be used to store the ID assigned to this build by CDash to a variable. * The :command:`ctest_update` command learned to honor a new variable: :variable:`CTEST_UPDATE_VERSION_OVERRIDE`. This can be used to specify the current version of your source tree rather than using the update command to discover the current version that is checked out. * The ``$`` and ``$`` :manual:`generator expressions ` were added. * The :envvar:`CMAKE_GENERATOR` environment variable was added to specify a default generator to use when :manual:`cmake(1)` is run without a ``-G`` option. Additionally, environment variables :envvar:`CMAKE_GENERATOR_PLATFORM`, :envvar:`CMAKE_GENERATOR_TOOLSET`, and :envvar:`CMAKE_GENERATOR_INSTANCE` were created to configure the generator. * An explicit deprecation diagnostic was added for policy ``CMP0066`` (``CMP0065`` 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 :variable:`CMAKE_CROSSCOMPILING_EMULATOR` variable and corresponding :prop_tgt:`CROSSCOMPILING_EMULATOR` target property learned to support arguments to the emulator. * The :module:`FindEnvModules` module was added to use Lua- and TCL-based environment modules in :ref:`CTest Scripts `. * The :command:`export(PACKAGE)` command now does nothing unless enabled via :variable:`CMAKE_EXPORT_PACKAGE_REGISTRY`. See policy :policy:`CMP0090`. * The :command:`file(INSTALL)` command learned a new argument, ``FOLLOW_SYMLINK_CHAIN``, which can be used to recursively resolve and install symlinks. * The :command:`file(REMOVE)` and :command:`file(REMOVE_RECURSE)` commands were changed to ignore empty arguments with a warning instead of treating them as a relative path and removing the contents of the current directory. * The :module:`FindBoost` module was reworked to expose a more consistent user experience between its config and module modes and with other find modules in general. * A new imported target ``Boost::headers`` is now defined (same as ``Boost::boost``). * New output variables ``Boost_VERSION_MACRO``, ``Boost_VERSION_MAJOR``, ``Boost_VERSION_MINOR``, ``Boost_VERSION_PATCH``, and ``Boost_VERSION_COUNT`` were added. * The internal logic for determining the value for ``Boost_FOUND``, for version and component checks, and for reporting the result to the user was replaced with the :module:`FindPackageHandleStandardArgs` module. (This fixed a bug that sometimes printed wrong status messages in config mode.) * The ``QUIET`` argument passed to :command:`find_package` is no longer ignored in config mode. * *Known issue*: The CMake package shipped with Boost ``1.70.0`` ignores the ``QUIET`` argument passed to :command:`find_package`. This is fixed in the next Boost release. * The input switch ``Boost_DETAILED_FAILURE_MSG`` was removed. * ``Boost_VERSION`` now reports the version in ``x.y.z`` format in module mode. See policy :policy:`CMP0093`. * The :module:`FindCups` module now provides imported targets. * The :module:`FindGLEW` module now provides an interface more consistent with what upstream GLEW provides in its own CMake package files. * Variable :variable:`CMAKE_FIND_PACKAGE_PREFER_CONFIG` was added to tell :command:`find_package` calls to look for a package configuration file first even if a find module is available. * The :module:`FindPostgreSQL` module learned to find debug and release variants separately. * Modules :module:`FindPython3`, :module:`FindPython2` and :module:`FindPython` have changed default strategy for lookup. See policy :policy:`CMP0094`. * Modules :module:`FindPython3`, :module:`FindPython2` and :module:`FindPython` gain a new variable to control frameworks lookup on macOS. * Modules :module:`FindPython3`, :module:`FindPython2` and :module:`FindPython` gain a new way to control lookup strategy. * Modules :module:`FindPython`, :module:`FindPython2` and :module:`FindPython3` gain a new target (respectively ``Python::Module``, ``Python2::Module`` and ``Python3::Module``) which can be used to develop Python modules. * Modules :module:`FindPython3`, :module:`FindPython2` and :module:`FindPython` gain capability to control how virtual environments are handled. * The :manual:`generator expressions ` ``C_COMPILER_ID``, ``CXX_COMPILER_ID``, ``CUDA_COMPILER_ID``, ``Fortran_COMPILER_ID``, ``COMPILE_LANGUAGE``, ``COMPILE_LANG_AND_ID``, and ``PLATFORM_ID`` learned to support matching one value from a comma-separated list. * A new ``COMPILE_LANG_AND_ID`` generator expression was introduced to allow specification of compile options for target files based on the :variable:`CMAKE__COMPILER_ID` and :prop_sf:`LANGUAGE` of each source file. * A new ``$`` :manual:`generator expression ` has been added. * New ``$``, ``$`` and ``$`` :manual:`generator expressions ` have been added to retrieve the base name of various artifacts. * New ``$``, ``$``, ``$`` and ``$`` :manual:`generator expressions ` have been added to retrieve the prefix and suffix of various artifacts. * The :generator:`Green Hills MULTI` generator now supports :command:`add_custom_command` and :command:`add_custom_target` * The :generator:`Green Hills MULTI` generator is now available on Linux. * Support was added for the IAR compiler architectures Renesas RX, RL78, RH850 and Texas Instruments MSP430. * The IAR compilers built for Linux (IAR BuildLx) now work as well. * ``INTERFACE`` library can now have :prop_tgt:`PUBLIC_HEADER` and :prop_tgt:`PRIVATE_HEADER` properties set. The headers specified by those properties can be installed using the :command:`install(TARGETS)` command by passing the ``PUBLIC_HEADER`` and ``PRIVATE_HEADER`` arguments respectively. * :command:`list` learned new sub-commands ``PREPEND``, ``POP_FRONT`` and ``POP_BACK``. * The :variable:`CMAKE_MSVC_RUNTIME_LIBRARY` variable and :prop_tgt:`MSVC_RUNTIME_LIBRARY` target property were introduced to select the runtime library used by compilers targeting the MSVC ABI. See policy :policy:`CMP0091`. * With MSVC-like compilers the value of :variable:`CMAKE__FLAGS` no longer contains warning flags like ``/W3`` by default. See policy :policy:`CMP0092`. * The :command:`message` command learned new types: ``NOTICE``, ``VERBOSE``, ``DEBUG`` and ``TRACE``. * The :manual:`cmake(1)` command learned a new CLI option ``--loglevel``. * The commands :command:`add_custom_command` and :command:`add_custom_target` gained a new ``JOB_POOL`` option that works with the :generator:`Ninja` generator to set the pool variable on the build statement. * The :module:`FindPkgConfig` now populates :prop_tgt:`INTERFACE_LINK_OPTIONS` property of imported targets with other (non-library) linker flags. * A variable :variable:`CMAKE_PROJECT_INCLUDE_BEFORE` was added to allow injection of custom code before the :command:`project` call. * A variable :variable:`CMAKE_PROJECT_INCLUDE` was added to allow injection of custom code into the project without knowing the project name a priori. * The ``TARGET_OBJECTS`` :manual:`generator expression ` is now supported on ``SHARED``, ``STATIC``, ``MODULE`` libraries and executables. * The :manual:`cmake(1)` ``-E remove_directory`` command learned to support removing multiple directories. * A new ``$`` :manual:`generator expression ` has been added. * The :generator:`Xcode` generator now requires at least Xcode 5. * The :manual:`cmake-server(7)` mode has been deprecated and will be removed from a future version of CMake. Please port clients to use the :manual:`cmake-file-api(7)` instead. * The ``$`` :manual:`generator expression ` gained support for a list of paths. * The :command:`string` learned a new sub-command ``REPEAT``. * SunPro compiler have learned how to compile C++14. * Preliminary support for the Swift language with the :generator:`Ninja` generator was added. Use the :envvar:`SWIFTC` environment variable to specify a compiler. * Support to emit an output file map was added to enable Swift compilation. * A target property :prop_tgt:`Swift_DEPENDENCIES_FILE` was added to targets to indicate where to save the target swift dependencies file. If one is not specified, it will default to `.swiftdeps`. * A target property :prop_tgt:`Swift_MODULE_NAME` was added to targets to indicate the Swift module name. If it is not specified, it will default to the name of the target. * A source property :prop_sf:`Swift_DEPENDENCIES_FILE` was added to sources to indicate where to save the target swift dependencies file. If one is not specified, it will default to `.swiftdeps`. * A source property :prop_sf:`Swift_DIAGNOSTICS_FILE` was added to sources to indicate where to write the serialised Swift diagnostics. * The :module:`UseSWIG` module learned to manage alternate library names by passing ``-interface `` for ``python`` language or ``-dllimport `` for ``CSharp`` language to the ``SWIG`` compiler. * A :prop_tgt:`VS_PACKAGE_REFERENCES` target property was added to tell :ref:`Visual Studio Generators` to add references to nuget packages. * For the :ref:`Visual Studio Generators`, :ref:`Makefile Generators`, and the :generator:`Ninja` generators the Just My Code feature of the Visual Studio Debugger can be leveraged by turning on the :prop_tgt:`VS_JUST_MY_CODE_DEBUGGING` target property. Its default value is provided by the variable :variable:`CMAKE_VS_JUST_MY_CODE_DEBUGGING`. * The :prop_tgt:`VS_PROJECT_IMPORT` target property was added which allows to import external .props files in managed Visual Studio targets. * A :prop_tgt:`VS_NO_SOLUTION_DEPLOY` target property was added to tell :ref:`Visual Studio Generators` whether to deploy an artifact to the WinCE or Windows Phone target device. * The :generator:`Xcode` generator now supports per-target schemes. See the :variable:`CMAKE_XCODE_GENERATE_SCHEME` variable and :prop_tgt:`XCODE_GENERATE_SCHEME` target property. * IBM AIX XL compiler have learned how to compile C++14.