| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442 |
- CMake 3.19 Release Notes
- ************************
- .. only:: html
- .. contents::
- Changes made since CMake 3.18 include the following.
- New Features
- ============
- Presets
- -------
- * :manual:`cmake(1)` and :manual:`cmake-gui(1)` now recognize
- ``CMakePresets.json`` and ``CMakeUserPresets.json`` files (see
- :manual:`cmake-presets(7)`).
- Generators
- ----------
- * The :generator:`Xcode` generator now uses the Xcode "new build system"
- when generating for Xcode 12.0 or higher.
- See the :variable:`CMAKE_XCODE_BUILD_SYSTEM` variable.
- One may use ``-T buildsystem=1`` to switch to the legacy build system.
- * The :generator:`Xcode` generator gained support for linking libraries and
- frameworks via the *Link Binaries With Libraries* build phase instead of
- always by embedding linker flags directly. This behavior is controlled by
- a new :prop_tgt:`XCODE_LINK_BUILD_PHASE_MODE` target property, which is
- initialized by a new :variable:`CMAKE_XCODE_LINK_BUILD_PHASE_MODE`
- variable.
- * The :ref:`Visual Studio Generators` for VS 2015 and above gained support
- for the Visual Studio Tools for Android. One may now set
- :variable:`CMAKE_SYSTEM_NAME` to ``Android`` to generate ``.vcxproj`` files
- for the Android tools.
- Languages
- ---------
- * CMake learned to support ``ISPC`` as a first-class language that can be
- enabled via the :command:`project` and :command:`enable_language` commands.
- ``ISPC`` is currently supported by the :ref:`Makefile Generators`
- and the :generator:`Ninja` generator on Linux, macOS, and Windows
- using the Intel ISPC compiler.
- * ``CUDA`` language support for Clang now includes:
- - separable compilation (:prop_tgt:`CUDA_SEPARABLE_COMPILATION`), and
- - finding scattered toolkit installations when cross-compiling.
- * ``CUDA`` language support now works on QNX.
- Platforms
- ---------
- * Apple Silicon is now supported (since CMake 3.19.2):
- * The :variable:`CMAKE_HOST_SYSTEM_PROCESSOR` is selected using ``uname -m``.
- Since this may vary based on CMake's own architecture and that of
- the invoking process tree, the :variable:`CMAKE_APPLE_SILICON_PROCESSOR`
- variable or :envvar:`CMAKE_APPLE_SILICON_PROCESSOR` environment
- variable may be set to specify a host architecture explicitly.
- * If :variable:`CMAKE_OSX_ARCHITECTURES` is not set, CMake adds explicit
- flags to tell the compiler to build for the
- :variable:`CMAKE_HOST_SYSTEM_PROCESSOR` so the toolchain does not
- have to guess based on the process tree's architecture.
- File-Based API
- --------------
- * The :manual:`cmake-file-api(7)` "codemodel" version 2 ``version`` field has
- been updated to 2.2.
- * The :manual:`cmake-file-api(7)` "codemodel" version 2 "target" object
- gained a new ``languageStandard`` field in the ``compileGroups`` objects.
- Command-Line
- ------------
- * The :manual:`cmake(1)` command-line tool's ``--install`` mode gained a
- ``--default-directory-permissions`` option.
- * :manual:`cmake(1)` gained a ``-E create_hardlink`` command-line tool
- that can be used to create hardlinks between files.
- GUI
- ---
- * The :manual:`CMake GUI <cmake-gui(1)>` now has an environment variable
- editor.
- Commands
- --------
- * The :command:`add_test` command now (officially) supports whitespace and
- other special characters in the name for the test it creates.
- See policy :policy:`CMP0110`.
- * The :command:`cmake_language` command gained a ``DEFER`` mode to
- schedule command calls to occur at the end of processing a directory.
- * The :command:`configure_file` command gained a ``NO_SOURCE_PERMISSIONS``
- option to suppress copying the input file's permissions to the output file.
- * The :command:`execute_process` command gained a ``COMMAND_ERROR_IS_FATAL``
- option to specify a fatal error.
- * The :command:`file(ARCHIVE_CREATE)` command gained a ``COMPRESSION_LEVEL``
- option to specify the compression level.
- * The :command:`file(CHMOD)` and :command:`file(CHMOD_RECURSE)` subcommands
- were added to set permissions of files and directories.
- * The :command:`file(DOWNLOAD)` command ``<file>`` argument is now
- optional. If it is not specified, the file is not saved.
- * The :command:`file(GENERATE)` command gained a new ``TARGET`` keyword to
- support resolving target-dependent generator expressions.
- * The :command:`file` command gained a new ``REAL_PATH`` sub-command to
- compute a path with symlinks resolved.
- * The :command:`find_package` command learned to handle a version range.
- * The :command:`separate_arguments` command gained a new ``PROGRAM`` option.
- It allows the arguments to be treated as a program invocation and will
- resolve the executable to a full path if it can be found.
- * The ``DIRECTORY`` option of the :command:`set_property`,
- :command:`get_property`, and :command:`get_directory_property` commands
- now accepts references to binary directory paths, such as the value of
- :variable:`CMAKE_CURRENT_BINARY_DIR`.
- * The :command:`string` command gained a set of new ``JSON`` sub commands
- that provide JSON parsing capabilities.
- Variables
- ---------
- * The :variable:`CMAKE_CLANG_VFS_OVERLAY` variable was added to tell
- Clang to use a VFS overlay to support the Windows SDK when
- cross-compiling from hosts with case-sensitive filesystems.
- * The :variable:`CMAKE_MFC_FLAG` variable now supports generator expressions.
- * The :variable:`CMAKE_OPTIMIZE_DEPENDENCIES` variable was added to
- initialize the new :prop_tgt:`OPTIMIZE_DEPENDENCIES` target property and
- avoid unnecessarily building dependencies for a static library.
- * The :variable:`CMAKE_PCH_INSTANTIATE_TEMPLATES` variable was added to
- initialize the new :prop_tgt:`PCH_INSTANTIATE_TEMPLATES` target property.
- * The :variable:`CMAKE_VS_WINDOWS_TARGET_PLATFORM_VERSION_MAXIMUM` variable
- was added to tell the :ref:`Visual Studio Generators` what maximum
- version of the Windows SDK to choose.
- Properties
- ----------
- * The :prop_tgt:`EXCLUDE_FROM_ALL` target property now supports
- :manual:`generator expressions <cmake-generator-expressions(7)>`.
- * The :prop_tgt:`OPTIMIZE_DEPENDENCIES` target property was added to
- avoid unnecessarily building dependencies for a static library.
- * The :prop_tgt:`PCH_INSTANTIATE_TEMPLATES` target property was added to enable
- template instantiation in the precompiled header. This is enabled by default
- and may significantly improve compile times. Currently only supported for
- Clang (version 11 or later).
- * The :prop_tgt:`WIN32_EXECUTABLE` target property now supports
- :manual:`generator expressions <cmake-generator-expressions(7)>`.
- Modules
- -------
- * The :module:`CheckCompilerFlag` module has been added to
- generalize :module:`CheckCCompilerFlag` and
- :module:`CheckCXXCompilerFlag` to more languages.
- It also supports the ``CUDA`` and ``ISPC`` languages.
- * The :module:`CheckLinkerFlag` module now supports the ``CUDA`` language.
- * The :module:`CheckSourceCompiles` module has been added to
- generalize :module:`CheckCSourceCompiles` and
- :module:`CheckCXXSourceCompiles` to more languages.
- It also supports the ``CUDA`` and ``ISPC`` languages.
- * The :module:`CheckSourceRuns` module has been added to
- generalize :module:`CheckCSourceRuns` and
- :module:`CheckCXXSourceRuns` to more languages.
- It also supports the ``CUDA`` language.
- * The :module:`CMakePackageConfigHelpers` module gained support for version
- ranges.
- * The :module:`FindCUDAToolkit` module gained support for finding CUDA
- toolkits that do not contain ``nvcc``, as well as for finding scattered
- toolkit installations when cross-compiling.
- * The :module:`FindPackageHandleStandardArgs` module learned to handle
- version ranges. It also gained the ``find_package_check_version()`` command
- to check the validity of a version against version-related arguments of
- :command:`find_package` command.
- * The :module:`FindPython3`, :module:`FindPython2` and :module:`FindPython`
- modules gained the ability to handle a version range.
- * The :module:`FindPython3`, :module:`FindPython2` and :module:`FindPython`
- modules provide, respectively, the variable ``Python3_LINK_OPTIONS``,
- ``Python2_LINK_OPTIONS`` and ``Python_LINK_OPTIONS`` for link options.
- * The :module:`FindSDL` module now provides:
- * An imported target ``SDL::SDL``.
- * Result variables ``SDL_LIBRARIES`` and ``SDL_INCLUDE_DIRS``.
- * Version variables ``SDL_VERSION``, ``SDL_VERSION_MAJOR``,
- ``SDL_VERSION_MINOR``, and ``SDL_VERSION_PATCH``.
- * The :module:`FindSWIG` module gained the ability to handle a version range.
- * The :module:`FindTIFF` module gained a ``CXX`` component to
- find the ``tiffxx`` library containing C++ bindings.
- * The :module:`FindVulkan` module now provides a ``Vulkan::glslc`` imported
- target and associated ``Vulkan_GLSLC_EXECUTABLE`` variable which contain
- the path to the GLSL SPIR-V compiler.
- * The :module:`UseSWIG` module gained support for new source file properties
- ``OUTPUT_DIR`` and ``OUTFILE_DIR`` to manage output directories on a
- per-source basis.
- CTest
- -----
- * :manual:`ctest(1)` now supports the CUDA ``compute-sanitizer`` checker
- (previously known as ``cuda-memcheck``) as the ``CTEST_MEMORYCHECK_COMMAND``.
- The different tools (``memcheck``, ``racecheck``, ``synccheck`` and
- ``initcheck``) supported by ``compute-sanitizer`` can be selected by
- adding appropriate flags to the ``CTEST_MEMORYCHECK_COMMAND_OPTIONS``
- variable. The default flags are ``--tool memcheck --leak-check full``.
- CPack
- -----
- * CPack gained the :variable:`CPACK_PRE_BUILD_SCRIPTS`,
- :variable:`CPACK_POST_BUILD_SCRIPTS`, and :variable:`CPACK_PACKAGE_FILES`
- variables.
- * The :cpack_gen:`CPack External Generator` gained the
- :variable:`CPACK_EXTERNAL_BUILT_PACKAGES` variable.
- * The :cpack_gen:`CPack WIX Generator` gained a
- :variable:`CPACK_WIX_CUSTOM_XMLNS` option to specify custom XML namespaces.
- Other
- -----
- * :ref:`Interface Libraries` may now have source files added via
- :command:`add_library` or :command:`target_sources`. Those
- with sources will be generated as part of the build system.
- Deprecated and Removed Features
- ===============================
- * Compatibility with versions of CMake older than 2.8.12 is now deprecated
- and will be removed from a future version. Calls to
- :command:`cmake_minimum_required` or :command:`cmake_policy` that set
- the policy version to an older value now issue a deprecation diagnostic.
- * An explicit deprecation diagnostic was added for policy ``CMP0071``
- (``CMP0071`` 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.
- * macOS SDKs older than 10.5 are no longer supported.
- * :manual:`cmake-gui(1)` now requires Qt5.
- Support for compiling with Qt4 has been removed.
- * The :manual:`cmake(1)` command-line option ``--warn-unused-vars`` has
- been removed and is now silently ignored. The option has not worked
- correctly since CMake 3.3.
- Documentation
- =============
- The following guides have been added:
- * :guide:`IDE Integration Guide`
- * :guide:`Importing and Exporting Guide`
- Other Changes
- =============
- * Building for macOS will now use the latest SDK available on the system,
- unless the user has explicitly chosen a SDK using
- :variable:`CMAKE_OSX_SYSROOT`. The deployment target or system macOS
- version will not affect the choice of SDK.
- * The :variable:`CMAKE_<LANG>_COMPILER` variable may now be used to
- store "mandatory" compiler flags like the :envvar:`CC` and other environment
- variables.
- * The :variable:`CMAKE_<LANG>_FLAGS_INIT` variable will now be considered
- during the compiler identification check if other sources like
- :variable:`CMAKE_<LANG>_FLAGS` or :envvar:`CFLAGS` are not set.
- * The :command:`find_program` command now requires permission to execute
- but not to read the file found. See policy :policy:`CMP0109`.
- * An imported target missing its location property fails during generation
- if the location is used. See policy :policy:`CMP0111`.
- * The following target-based generator expressions that query for directory or
- file name components no longer add a dependency on the evaluated target.
- See policy :policy:`CMP0112`.
- - ``TARGET_FILE_DIR``
- - ``TARGET_LINKER_FILE_BASE_NAME``
- - ``TARGET_LINKER_FILE_NAME``
- - ``TARGET_LINKER_FILE_DIR``
- - ``TARGET_SONAME_FILE_NAME``
- - ``TARGET_SONAME_FILE_DIR``
- - ``TARGET_PDB_FILE_NAME``
- - ``TARGET_PDB_FILE_DIR``
- - ``TARGET_BUNDLE_DIR``
- - ``TARGET_BUNDLE_CONTENT_DIR``
- * :ref:`Makefile Generators` no longer repeat custom commands from target
- dependencies. See policy :policy:`CMP0113`.
- * The :module:`ExternalProject` module handling of step target dependencies
- has been revised. See policy :policy:`CMP0114`.
- * The :prop_tgt:`OSX_ARCHITECTURES` target property is now respected
- for the ``ASM`` language.
- * If ``CUDA`` compiler detection fails with user-specified
- :variable:`CMAKE_CUDA_ARCHITECTURES` or
- :variable:`CMAKE_CUDA_HOST_COMPILER`, an error is raised.
- Updates
- =======
- Changes made since CMake 3.19.0 include the following.
- 3.19.1
- ------
- * CMake 3.19.0 compiles source files with the :prop_sf:`LANGUAGE`
- property by passing an explicit language flag such as ``-x c``.
- This is consistent with the property's documented meaning that
- the source file is written in the specified language. However,
- it can break projects that were using the property only to
- cause the specified language's compiler to be used. This has
- been reverted to restore behavior from CMake 3.18 and below.
- * CUDA 11.1 support for Clang.
- 3.19.2
- ------
- * The precompiled macOS binary provided on ``cmake.org`` is now a
- universal binary with ``x86_64`` and ``arm64`` architectures.
- It requires macOS 10.10 or newer.
- The package file naming pattern has been changed from
- ``cmake-$ver-Darwin-x86_64`` to ``cmake-$ver-macos-universal``.
- * Apple Silicon host architecture selection support was updated.
- CMake 3.19.0 and 3.19.1 always chose ``arm64`` as the host architecture.
- CMake 3.19.2 returns to using ``uname -m`` as CMake 3.18 and below did.
- Since this may vary based on CMake's own architecture and that of
- the invoking process tree, the :variable:`CMAKE_APPLE_SILICON_PROCESSOR`
- variable or :envvar:`CMAKE_APPLE_SILICON_PROCESSOR` environment
- variable may be set to specify a host architecture explicitly.
- * The :variable:`CMAKE_ISPC_HEADER_SUFFIX` variable and corresponding
- :prop_tgt:`ISPC_HEADER_SUFFIX` target property were added to control
- the header suffix used by ``ISPC`` compiler generated headers.
- 3.19.3
- ------
- * A precompiled Linux ``aarch64`` binary is now provided on ``cmake.org``.
- * Two precompiled macOS binaries are now provided on ``cmake.org``:
- * The naming pattern ``cmake-$ver-macos-universal`` is a universal
- binary with ``x86_64`` and ``arm64`` architectures. It requires
- macOS 10.13 or newer.
- * The naming pattern ``cmake-$ver-macos10.10-universal`` is a universal
- binary with ``x86_64`` and ``arm64`` architectures. It requires
- macOS 10.10 or newer.
- 3.19.4
- ------
- * The :variable:`CMAKE_VS_WINDOWS_TARGET_PLATFORM_VERSION_MAXIMUM`
- variable introduced in 3.19.0 previously worked only with the
- :generator:`Visual Studio 14 2015` generator. It has now been fixed to
- work with :ref:`Visual Studio Generators` for later VS versions too.
- 3.19.5
- ------
- * When :prop_tgt:`IOS_INSTALL_COMBINED` is enabled and the :generator:`Xcode`
- generator is used, it is now possible to initiate an install or package
- creation by running ``cmake --install`` or ``cpack`` from the command line.
- When using the Xcode new build system, these are the only supported methods
- due to a limitation of Xcode. Initiating these operations by building the
- ``install`` or ``package`` targets in Xcode is only supported when using
- the legacy build system.
- * The framework handling introduced in 3.19.0 as part of supporting Xcode's
- *Link Binaries With Libraries* build phase broke the ability to switch
- between device and simulator builds without reconfiguring. That capability
- has now been restored.
- 3.19.6
- ------
- * The :manual:`cmake-presets(7)` feature no longer allows comments in
- ``CMakePresets.json`` or ``CMakeUserPresets.json`` files.
- This was mistakenly allowed by the implementation in CMake 3.19.0 through
- CMake 3.19.5, and was not documented.
- 3.19.7
- ------
- * With :ref:`Visual Studio Generators` for VS 2017 and higher, the
- :variable:`CMAKE_GENERATOR_TOOLSET` field ``version=`` now accepts
- three-component MSVC toolset versions such as ``14.28.29910``.
- See the :variable:`CMAKE_VS_PLATFORM_TOOLSET_VERSION` variable.
|