| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396 |
- CMake 3.15 Release Notes
- ************************
- .. only:: html
- .. contents::
- Changes made since CMake 3.14 include the following.
- New Features
- ============
- Generators
- ----------
- * 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.
- * The :generator:`Green Hills MULTI` generator has been updated:
- * It now supports the :command:`add_custom_command` and
- :command:`add_custom_target` commands.
- * It is now available on Linux.
- Languages
- ---------
- * Preliminary support for the ``Swift`` language was added to the
- :generator:`Ninja` generator:
- * Use the :envvar:`SWIFTC` environment variable to specify a compiler.
- * The :prop_tgt:`Swift_DEPENDENCIES_FILE` target property and
- :prop_sf:`Swift_DEPENDENCIES_FILE` source file property were added
- to customize dependency files.
- * The :prop_tgt:`Swift_MODULE_NAME` target property was added to
- customize the Swift module name.
- * The :prop_sf:`Swift_DIAGNOSTICS_FILE` source property was added to
- indicate where to write the serialized Swift diagnostics.
- The Swift support is experimental, not considered stable, and may change
- in future releases of CMake.
- Compilers
- ---------
- * The ``Clang`` compiler variant on Windows that targets the MSVC ABI
- but has a GNU-like command line is now supported.
- * Support for the Clang-based ARM compiler was added with compiler id
- ``ARMClang``.
- * Support was added for the IAR compiler architectures Renesas RX,
- RL78, RH850 and Texas Instruments MSP430.
- * Support was added for the IAR compilers built for Linux (IAR BuildLx).
- Command-Line
- ------------
- * 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.
- * The :manual:`cmake(1)` ``--build`` tool ``--target`` parameter gained support
- for multiple targets, e.g. ``cmake --build . --target Library1 Library2``.
- It now also has a short form ``-t`` alias, e.g.
- ``cmake --build . -t Library1 Library2``.
- * The :manual:`cmake(1)` command gained a new ``--install`` option.
- This may be used after building a project to run installation without
- using the generated build system or the native build tool.
- * The :manual:`cmake(1)` command learned a new CLI option ``--loglevel``.
- * The :manual:`cmake(1)` ``-E remove_directory`` command-line tool learned
- to support removing multiple directories.
- * The :manual:`cmake(1)` ``-E tar`` tool has been improved:
- * It now continues adding files to an archive even if some of the files
- are not readable. This behavior is more consistent with the
- classic ``tar`` tool.
- * It now parses all flags, and if an invalid flag was provided, a
- warning is issued.
- * It now displays an error if no action flag was specified, along with a
- list of possible actions: ``t`` (list), ``c`` (create) or ``x`` (extract).
- * It now supports extracting (``-x``) or listing (``-t``) only specific
- files or directories.
- * It now supports Zstandard compression with a ``--zstd`` option.
- Zstandard was designed to give a compression ratio comparable to that
- of the DEFLATE (zip) algorithm, but faster, especially for decompression.
- Commands
- --------
- * The :command:`add_custom_command` and :command:`add_custom_target` commands
- gained a new ``JOB_POOL`` option that works with the :generator:`Ninja`
- generator to set the pool variable on the build statement.
- * The :command:`add_library` command ``ALIAS`` option learned to support
- import libraries of the ``UNKNOWN`` type.
- * The :command:`cmake_parse_arguments` command gained an additional
- ``<prefix>_KEYWORDS_MISSING_VALUES`` output variable to report
- keyword arguments that were given by the caller with no values.
- * 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.
- * The :command:`file(INSTALL)` command learned a new argument,
- ``FOLLOW_SYMLINK_CHAIN``, which can be used to recursively resolve and
- install symlinks.
- * :command:`list` learned new sub-commands:
- ``PREPEND``, ``POP_FRONT`` and ``POP_BACK``.
- * The :command:`message` command learned new types:
- ``NOTICE``, ``VERBOSE``, ``DEBUG`` and ``TRACE``.
- * The :command:`string` learned a new sub-command ``REPEAT``.
- Variables
- ---------
- * The :variable:`CMAKE_CROSSCOMPILING_EMULATOR` variable and corresponding
- :prop_tgt:`CROSSCOMPILING_EMULATOR` target property learned to support
- arguments to the emulator.
- * The :variable:`CMAKE_FIND_PACKAGE_PREFER_CONFIG` variable was added to tell
- :command:`find_package` calls to look for a package configuration
- file first even if a find module is available.
- * The :variable:`CMAKE_FRAMEWORK` variable was added to initialize the
- :prop_tgt:`FRAMEWORK` property on all targets.
- * The :variable:`CMAKE_VS_JUST_MY_CODE_DEBUGGING` variable and
- :prop_tgt:`VS_JUST_MY_CODE_DEBUGGING` target property were added to
- enable the Just My Code feature of the Visual Studio Debugger when
- compiling with MSVC cl 19.05 and higher.
- * 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`.
- * The :variable:`CMAKE_PROJECT_INCLUDE` and
- :variable:`CMAKE_PROJECT_INCLUDE_BEFORE` variables were added to allow
- injection of custom code at the sites of :command:`project` calls
- without knowing the project name a priori.
- Properties
- ----------
- * The :prop_tgt:`ADDITIONAL_CLEAN_FILES` target property and
- :prop_dir:`ADDITIONAL_CLEAN_FILES` directory property were added.
- They allow to register additional files that should be removed during
- the clean stage.
- * The :prop_tgt:`PUBLIC_HEADER` and :prop_tgt:`PRIVATE_HEADER` properties
- may now be set on :ref:`Interface Libraries`. 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.
- * The :prop_tgt:`VS_PACKAGE_REFERENCES` target property was added to
- tell :ref:`Visual Studio Generators` to add references to ``nuget``
- packages.
- * The :prop_tgt:`VS_PROJECT_IMPORT` target property was added to allow
- managed Visual Studio project files to import external ``.props`` files.
- * The :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.
- Modules
- -------
- * 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 ``QUIET`` argument passed to :command:`find_package` is no
- longer ignored in config mode. Note that 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:`FindEnvModules` module was added to use Lua- and TCL-based
- environment modules in :ref:`CTest Scripts <CTest Script>`.
- * The :module:`FindGLEW` module now provides an interface more consistent
- with what upstream GLEW provides in its own CMake package files.
- * The :module:`FindPkgConfig` now populates :prop_tgt:`INTERFACE_LINK_OPTIONS`
- property of imported targets with other (non-library) linker flags.
- * The :module:`FindPostgreSQL` module learned to find debug and release
- variants separately.
- * Modules :module:`FindPython3`, :module:`FindPython2` and :module:`FindPython`
- gained additional lookup strategies and controls, and a new default.
- See policy :policy:`CMP0094`.
- * 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 :module:`UseSWIG` module learned to manage alternate library names
- by passing ``-interface <library_name>`` for ``python`` language or
- ``-dllimport <library_name>`` for ``CSharp`` language to the ``SWIG``
- compiler.
- Generator Expressions
- ---------------------
- * The :manual:`generator expressions <cmake-generator-expressions(7)>`
- ``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.
- * The ``$<CUDA_COMPILER_ID:...>`` and ``$<CUDA_COMPILER_VERSION:...>``
- :manual:`generator expressions <cmake-generator-expressions(7)>` were added.
- * The ``$<COMPILE_LANG_AND_ID:...>`` generator expression was introduced to
- allow specification of compile options for target files based on the
- :variable:`CMAKE_<LANG>_COMPILER_ID` and :prop_sf:`LANGUAGE` of
- each source file.
- * A ``$<FILTER:list,INCLUDE|EXCLUDE,regex>``
- :manual:`generator expression <cmake-generator-expressions(7)>`
- has been added.
- * A ``$<REMOVE_DUPLICATES:list>``
- :manual:`generator expression <cmake-generator-expressions(7)>`
- has been added.
- * The ``$<SHELL_PATH:...>`` :manual:`generator expression
- <cmake-generator-expressions(7)>` gained support for a list of paths.
- * New ``$<TARGET_FILE*>`` :manual:`generator expressions
- <cmake-generator-expressions(7)>` were added to retrieve the prefix, base
- name, and suffix of the file names of various artifacts:
- * ``$<TARGET_FILE_PREFIX:...>``
- * ``$<TARGET_FILE_BASE_NAME:...>``
- * ``$<TARGET_FILE_SUFFIX:...>``
- * ``$<TARGET_LINKER_FILE_PREFIX:...>``
- * ``$<TARGET_LINKER_FILE_BASE_NAME:...>``
- * ``$<TARGET_LINKER_FILE_SUFFIX:...>``
- * ``$<TARGET_PDB_FILE_BASE_NAME:...>``
- * The ``$<TARGET_OBJECTS:...>`` :manual:`generator expression
- <cmake-generator-expressions(7)>` is now supported on ``SHARED``,
- ``STATIC``, ``MODULE`` libraries and executables.
- CTest
- -----
- * 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.
- CPack
- -----
- * The :cpack_gen:`CPack IFW Generator` gained a new
- :variable:`CPACK_IFW_PACKAGE_STYLE_SHEET` variable to customize the
- installer stylesheet.
- Deprecated and Removed Features
- ===============================
- * 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 :prop_dir:`ADDITIONAL_MAKE_CLEAN_FILES` directory property is now
- deprecated. Use the :prop_dir:`ADDITIONAL_CLEAN_FILES` directory property
- instead.
- * The variable :variable:`CMAKE_AUTOMOC_RELAXED_MODE` is considered
- deprecated. Support still exists but will be removed in future versions.
- * The :command:`export(PACKAGE)` command now does nothing unless
- enabled via :variable:`CMAKE_EXPORT_PACKAGE_REGISTRY`.
- See policy :policy:`CMP0090`.
- * The :generator:`Xcode` generator now requires at least Xcode 5.
- * 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.
- Other Changes
- =============
- * If a feature specified by :command:`target_compile_features` is available
- in the compiler's default standard level, CMake 3.14 and below incorrectly
- added unnecessary ``-std=`` flags that could lower the standard level.
- This bug has been fixed in CMake 3.15. This behavior change may expose
- bugs in existing projects that were relying on undocumented implementation
- details. Specifying compile features only ensures that the compiler runs
- in a mode that has those features, not that any specific standard level is
- used or explicit ``-std=`` flag passed.
- * CMake learned how to compile C++14 with the IBM AIX XL compiler
- and the SunPro compiler and to compile C++20 with the AppleClang compiler.
- * With MSVC-like compilers the value of :variable:`CMAKE_<LANG>_FLAGS`
- no longer contains warning flags like ``/W3`` by default.
- See policy :policy:`CMP0092`.
- * IBM Clang-based XL compilers that define ``__ibmxl__`` now use the
- compiler id ``XLClang`` instead of ``XL``. See policy :policy:`CMP0089`.
- * 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.
- Updates
- =======
- Changes made since CMake 3.15.0 include the following.
- 3.15.1
- ------
- * In CMake 3.15.0 support for the GNU-like ``Clang`` compiler targeting the
- MSVC ABI implemented :variable:`CMAKE_CXX_STANDARD` values 98 and 11 using
- the corresponding ``-std=`` flags. However, these modes do not work with
- the MSVC standard library. Therefore CMake 3.15.1 passes C++14 standard
- flags even for C++98 and C++11. This is consistent with MSVC itself which
- always runs in a mode aware of C++14.
- * Preliminary Swift support added in 3.15.0 has been updated.
- 3.15.2
- ------
- * In CMake 3.15.0 and 3.15.1 the :variable:`CMAKE_FIND_PACKAGE_PREFER_CONFIG`
- variable caused the :command:`find_package` command to fail on a missing
- package even without the ``REQUIRED`` option. This has been fixed.
- 3.15.3
- ------
- * ``CrayPrgEnv`` compiler wrapper support has been updated for the 19.06
- release of the Cray Programming Environment for which the default linking
- mode on XC Cray systems is now dynamic instead of static.
- 3.15.4
- ------
- * In CMake 3.15.0 through 3.15.3, the :prop_dir:`EXCLUDE_FROM_ALL`
- directory property was regressed from pre-3.14 behavior and caused
- targets within the directory to be excluded even from its own "all".
- This has been fixed.
- The bug also existed in 3.14.0 through 3.14.6 and is fixed in 3.14.7.
|