Commit b81cb27f authored by Brad King's avatar Brad King
Browse files

Help: Consolidate 3.19 release notes

Run the `Utilities/Release/consolidate-relnotes.bash` script to move
notes from `Help/release/dev/*` into `Help/release/3.19.rst`.
parent 8f2ba9a3
CMake 3.19 Release Notes
************************
.. only:: html
.. contents::
Changes made since CMake 3.18 include the following.
* 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 :prop_tgt:`OSX_ARCHITECTURES` target property is now respected for the
``ASM`` language.
* The :command:`set_property`, :command:`get_property`,
and :command:`get_directory_property` commands' ``DIRECTORY``
options now accept references to binary directory paths,
such as the value of :variable:`CMAKE_CURRENT_BINARY_DIR`.
* :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.
* The :module:`CheckSourceCompiles` module has been added to
generalize :module:`CheckCSourceCompiles` and
:module:`CheckCXXSourceCompiles` to more languages.
* The :module:`CheckSourceRuns` module has been added to
generalize :module:`CheckCSourceRuns` and
:module:`CheckCXXSourceRuns` to more languages.
* The :module:`CheckCompilerFlag` module has been added to
generalize :module:`CheckCCompilerFlag` and
:module:`CheckCXXCompilerFlag` to more languages.
* A :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 ``Clang`` compiler gained support for handling system include directories
when running on Windows.
* The :manual:`cmake(1)` gained a ``-E create_hardlink`` command-line tool
that can be used to create hardlinks between files.
* The :manual:`CMake GUI <cmake-gui(1)>` now has an environment variable editor.
* The :command:`cmake_language` command gained a ``DEFER`` mode to
schedule command calls to occur at the end of processing a directory.
* :module:`CMakePackageConfigHelpers` module learned to manage version range.
* The :command:`cmake_path` command was added for operations on
filesystem paths.
* :manual:`cmake(1)` and :manual:`cmake-gui(1)` now recognize
``CMakePresets.json`` and ``CMakeUserPresets.json`` files.
* 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 indentification check if other sources like :variable:`CMAKE_<LANG>_FLAGS`
or :envvar:`CFLAGS` are not set.
* The :command:`configure_file` command gained a ``NO_SOURCE_PERMISSIONS``
option to suppress copying the input file's permissions to the output file.
* :cpack_gen:`CPack External Generator` learned the :variable:`CPACK_EXTERNAL_BUILT_PACKAGES` variable.
* CPack learned the :variable:`CPACK_PRE_BUILD_SCRIPTS`, :variable:`CPACK_POST_BUILD_SCRIPTS`,
and :variable:`CPACK_PACKAGE_FILES` variables.
* The :cpack_gen:`CPack WIX Generator` gained a
:variable:`CPACK_WIX_CUSTOM_XMLNS` option to specify custom XML namespaces.
* :manual:`ctest(1)` gained support for cuda-memcheck as ``CTEST_MEMORYCHECK_COMMAND``.
The different tools (memcheck, racecheck, synccheck, initcheck) supplied by
cuda-memcheck can be selected by setting the appropriate flags using the
``CTEST_MEMORYCHECK_COMMAND_OPTIONS`` variable.
The default flags are `--tool memcheck --leak-check full`.
* The :module:`CheckCompilerFlag` module was extended to
support 'CUDA'.
* The :module:`CheckSourceCompiles` module was extended to
support 'CUDA'.
* The :module:`CheckSourceRuns` module was extended to
support 'CUDA'.
* The :module:`CheckLinkerFlag` module has been extended to
support the validity of CUDA link flags.
* :prop_tgt:`CUDA_SEPARABLE_COMPILATION` is now supported when using Clang.
* If ``CUDA`` compiler detection fails with user-specified
:variable:`CMAKE_CUDA_ARCHITECTURES` or :variable:`CMAKE_CUDA_HOST_COMPILER`
an error is raised.
* Compiler ABI detection now handles NVCC-style ``-Werror`` flags.
* Scattered toolkit installations are now recognized when crosscompiling
``CUDA`` using Clang.
* :module:`FindCUDAToolkit` now finds scattered toolkit installations when
crosscompiling.
* :ref:`Makefile Generators` no longer repeat custom commands from target
dependencies. See policy :policy:`CMP0113`.
* 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.
* 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.
* The :prop_tgt:`EXCLUDE_FROM_ALL` target property gained support for
:manual:`generator expressions <cmake-generator-expressions(7)>`.
* The :command:`execute_process` command gained a ``COMMAND_ERROR_IS_FATAL``
option to specify a fatal error.
* The :module:`ExternalProject` module handling of step target dependencies
has been revised. See policy :policy:`CMP0114`.
* 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.
* The :command:`file(ARCHIVE_CREATE)` command gained a ``COMPRESSION_LEVEL``
option to specify the compression level.
* Add :command:`file(CHMOD)` and :command:`file(CHMOD_RECURSE)` to
set permissions of files and directories.
* The ``<file>`` argument is now optional for :command:`file(DOWNLOAD)`. 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` gained sub-command `REAL_PATH` to compute a path with
symlinks resolved.
* The :module:`FindCUDAToolkit` module gained support for finding CUDA toolkits
that do not contain ``nvcc``.
* The :command:`find_package` command learned to handle a version range.
* The :command:`find_program` command now requires permission to execute
but not to read the file found. See policy :policy:`CMP0109`.
* The :module:`FindPython3`, :module:`FindPython2` and :module:`FindPython`
modules gained the capability to manage a version range.
* The :module:`FindSDL` module now provides:
* 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``.
* :module:`FindSWIG` module gains the capability to manage a version range.
* The :module:`FindTIFF` module gained a ``CXX`` component to
find the ``tiffxx`` library containing C++ bindings.
* The :module:`FindVulkan` module gained a new output variable
``Vulkan_GLSLC_EXECUTABLE`` which contains the path to the
GLSL SPIR-V compiler.
* The :module:`FindVulkan` module gained a new target
``Vulkan::glslc`` which contains the path to the
GLSL SPIR-V compiler.
* The :module:`FindPackageHandleStandardArgs` module learned to handle
version range. 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 :variable:`CMAKE_MFC_FLAG` variable now supports generator expressions.
* A new guide on :guide:`IDE integration <IDE Integration Guide>` has been added.
* An imported target with a missing location now fails during generation if the
location is used. See policy :policy:`CMP0111`.
* The ``--install`` argument of the :manual:`cmake(1)` command line tool gained a
``--default-directory-permissions`` argument.
* The :module:`CheckCompilerFlag` module was extended to
support 'ISPC'.
* The :module:`CheckSourceCompiles` module was extended to
support 'ISPC'.
* 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.
* The Intel ISPC compiler (``ispc``) is supported.
* 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.
* macOS SDKs older than 10.5 are no longer supported.
* A new target property, :prop_tgt:`OPTIMIZE_DEPENDENCIES`, was added to
avoid unnecessarily building dependencies for a static library.
* A new variable, :variable:`CMAKE_OPTIMIZE_DEPENDENCIES`, was added to
initialize the :prop_tgt:`OPTIMIZE_DEPENDENCIES` target property.
* The :prop_tgt:`PCH_INSTANTIATE_TEMPLATES` target property was added to enable
template instantiation in the precompiled header. This is enabled by default
and offers a roughly 20% compile time improvement. Currently only supported
by Clang 11.
* 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``
* :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.
* The :command:`separate_arguments` command gained new ``PROGRAM`` option to
search program.
* The :command:`string` command gained set of new ``JSON`` sub commands to provide JSON
parsing capabilities.
* :module:`UseSWIG` module gains new source file properties ``OUTPUT_DIR`` and
``OUTFILE_DIR`` to manage output directories on per source basis.
* The :ref:`Visual Studio Generators` for Visual Studio 2015 and above gained
support for the Visual Studio Tools for Android. This allows you to set
:variable:`CMAKE_SYSTEM_NAME` to `Android` to generate `.vcxproj` files for
the Android tools.
* A :variable:`CMAKE_VS_WINDOWS_TARGET_PLATFORM_VERSION_MAXIMUM` variable
was added to tell the :ref:`Visual Studio Generators` what maximumm
version of the Windows SDK to choose.
* The :prop_tgt:`WIN32_EXECUTABLE` target property now supports
:manual:`generator expressions <cmake-generator-expressions(7)>`.
* 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 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.
CMakePackageConfigHelpers-version_range
---------------------------------------
* :module:`CMakePackageConfigHelpers` module learned to manage version range.
CPACK_EXTERNAL_BUILT_PACKAGES
-----------------------------
* :cpack_gen:`CPack External Generator` learned the :variable:`CPACK_EXTERNAL_BUILT_PACKAGES` variable.
EXCLUDE_FROM_ALL-genex
----------------------
* The :prop_tgt:`EXCLUDE_FROM_ALL` target property gained support for
:manual:`generator expressions <cmake-generator-expressions(7)>`.
ExternalProject-steps-refinement
--------------------------------
* The :module:`ExternalProject` module handling of step target dependencies
has been revised. See policy :policy:`CMP0114`.
FPHSA-version_range
-------------------
* The :module:`FindPackageHandleStandardArgs` module learned to handle
version range. 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.
FindCUDAToolkit-no-nvcc
-----------------------
* The :module:`FindCUDAToolkit` module gained support for finding CUDA toolkits
that do not contain ``nvcc``.
FindPython-version_range
------------------------
* The :module:`FindPython3`, :module:`FindPython2` and :module:`FindPython`
modules gained the capability to manage a version range.
FindSDL-update
--------------
* The :module:`FindSDL` module now provides:
* 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``.
FindSWIG-version-range
----------------------
* :module:`FindSWIG` module gains the capability to manage a version range.
FindTIFF-tiffxx
---------------
* The :module:`FindTIFF` module gained a ``CXX`` component to
find the ``tiffxx`` library containing C++ bindings.
FindVulkan-glslc
----------------
* The :module:`FindVulkan` module gained a new output variable
``Vulkan_GLSLC_EXECUTABLE`` which contains the path to the
GLSL SPIR-V compiler.
* The :module:`FindVulkan` module gained a new target
``Vulkan::glslc`` which contains the path to the
GLSL SPIR-V compiler.
PCH_INSTANTIATE_TEMPLATES
-------------------------
* The :prop_tgt:`PCH_INSTANTIATE_TEMPLATES` target property was added to enable
template instantiation in the precompiled header. This is enabled by default
and offers a roughly 20% compile time improvement. Currently only supported
by Clang 11.
UseSwig-output-source-properties
--------------------------------
* :module:`UseSWIG` module gains new source file properties ``OUTPUT_DIR`` and
``OUTFILE_DIR`` to manage output directories on per source basis.
add_test-special-chars-in-name
------------------------------
* 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`.
asm-osx-architectures
---------------------
* The :prop_tgt:`OSX_ARCHITECTURES` target property is now respected for the
``ASM`` language.
binary-dir-props
----------------
* The :command:`set_property`, :command:`get_property`,
and :command:`get_directory_property` commands' ``DIRECTORY``
options now accept references to binary directory paths,
such as the value of :variable:`CMAKE_CURRENT_BINARY_DIR`.
build-interface-targets
-----------------------
* :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.
check-source-modules
^^^^^^^^^^^^^^^^^^^^
* The :module:`CheckSourceCompiles` module has been added to
generalize :module:`CheckCSourceCompiles` and
:module:`CheckCXXSourceCompiles` to more languages.
* The :module:`CheckSourceRuns` module has been added to
generalize :module:`CheckCSourceRuns` and
:module:`CheckCXXSourceRuns` to more languages.
* The :module:`CheckCompilerFlag` module has been added to
generalize :module:`CheckCCompilerFlag` and
:module:`CheckCXXCompilerFlag` to more languages.
clang-cl-vfs
------------
* A :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.
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment