diff options
author | Brad King <brad.king@kitware.com> | 2023-06-05 15:44:09 (GMT) |
---|---|---|
committer | Brad King <brad.king@kitware.com> | 2023-06-06 15:15:19 (GMT) |
commit | 78d2c9fef0745ffd67929a76497bf88d1b04e590 (patch) | |
tree | 51fac424a8a9cb5d46fd938f29ba955e66ffc9a8 | |
parent | e6bcda8c3917b555c59a4410d5c19c1aa98afd78 (diff) | |
download | CMake-78d2c9fef0745ffd67929a76497bf88d1b04e590.zip CMake-78d2c9fef0745ffd67929a76497bf88d1b04e590.tar.gz CMake-78d2c9fef0745ffd67929a76497bf88d1b04e590.tar.bz2 |
Help: Organize and revise 3.27 release notes
Add section headers similar to the 3.26 release notes and move each
individual bullet into an appropriate section. Revise a few bullets.
-rw-r--r-- | Help/release/3.27.rst | 311 |
1 files changed, 178 insertions, 133 deletions
diff --git a/Help/release/3.27.rst b/Help/release/3.27.rst index a5187b5..db087fe 100644 --- a/Help/release/3.27.rst +++ b/Help/release/3.27.rst @@ -7,196 +7,241 @@ CMake 3.27 Release Notes Changes made since CMake 3.26 include the following. -* Support for text-based stubs (i.e. ``.tbd`` files) was added on macOS - platform. This capability is managed through the :prop_tgt:`ENABLE_EXPORTS` - property. +New Features +============ -* The :variable:`CMAKE_AUTOMOC_EXECUTABLE`, - :variable:`CMAKE_AUTORCC_EXECUTABLE`, and - :variable:`CMAKE_AUTOUIC_EXECUTABLE` variables were added to initialize the - corresponding target properties as targets are created. - -* The :prop_tgt:`AUTOGEN_USE_SYSTEM_INCLUDE` target property and - corresponding :variable:`CMAKE_AUTOGEN_USE_SYSTEM_INCLUDE` were - added to explicitly control whether autogen headers are - considered system headers. - -* The :prop_tgt:`INTERFACE_AUTOMOC_MACRO_NAMES` target property was added to - specify macro names for ``moc`` as a transitive usage requirement. +Debugger +-------- * :manual:`cmake(1)` now supports interactive debugging of the CMake language. See the :option:`--debugger <cmake --debugger>` option. -* ``cmake --build $dir --verbose`` will now print the working directory and - command line used to perform the build. +Presets +------- -* The :cpack_gen:`CPack Inno Setup Generator` was added to package using - Inno Setup. +* :manual:`cmake-presets(7)` files now support schema version ``7``. - The new generator adds: +* :manual:`cmake-presets(7)` now supports ``$penv{}`` macro expansion + in ``include`` fields. - * A lot of options to customize the Inno Setup installer (e.g. custom - installation rules) - * Start menu and desktop shortcuts - * Components (and also downloaded components) +Generators +---------- -* The :prop_test:`TIMEOUT_SIGNAL_NAME` and - :prop_test:`TIMEOUT_SIGNAL_GRACE_PERIOD` test properties were added - to specify a POSIX signal to send to a test process when its timeout - is reached. +* The :ref:`Makefile <Makefile Generators>` and :ref:`Ninja <Ninja Generators>` + generators now support using the ``--dependency-file`` linker flag, + added by GNU Binutils 2.35 and LLVM's LLD 12.0.0, so that files read by the + linker will cause a relink if they change (typically modified timestamps). + See the :variable:`CMAKE_LINK_DEPENDS_USE_LINKER` variable. -* A :prop_tgt:`CUDA_CUBIN_COMPILATION` target property was added to - :ref:`Object Libraries` to support compiling to ``.cubin`` files - instead of host object files. Currently only supported with NVIDIA. +* The :ref:`Visual Studio Generators` for VS 2015 and above learned to + select the Windows SDK version explicitly using a ``version=`` field + in the :variable:`CMAKE_GENERATOR_PLATFORM` variable. + See :ref:`Visual Studio Platform Selection`. -* A :prop_tgt:`CUDA_FATBIN_COMPILATION` target property was added to - :ref:`Object Libraries` to support compiling to ``.fatbin`` files - instead of host object files. Currently only supported with NVIDIA. +Languages +--------- -* A :prop_tgt:`CUDA_OPTIX_COMPILATION` target property was added to - :ref:`Object Libraries` to support compiling to ``.optixir`` files - instead of host object files. Currently only supported with NVIDIA. +* The ``CXX`` language now treats source file extensions + ``.ccm``, ``.cxxm``, and ``.c++m`` as C++. -* Source file extensions ``.ccm``, ``.cxxm``, or ``.c++m`` are now - treated as C++. +File-Based API +-------------- -* The :ref:`Extra Generators` have been deprecated. IDEs may use the - :manual:`cmake-file-api(7)` to view CMake-generated project build trees. +* The :manual:`cmake-file-api(7)` "codemodel" version 2 ``version`` field has + been updated to 2.6. -* Compatibility with versions of CMake older than 3.5 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 :manual:`cmake-file-api(7)` "codemodel" version 2 "target" object gained + a new "frameworks" field in the "compileGroups" objects. + +Platforms +--------- + +* Apple text-based stubs (i.e. ``.tbd`` files) may now be created for shared + libraries on macOS. See the :prop_tgt:`ENABLE_EXPORTS` property. + +Commands +-------- + +* The :command:`add_custom_command` command gained a new + ``DEPENDS_EXPLICIT_ONLY`` option to tell the :ref:`Ninja Generators` + not to add any dependencies implied by the target to which it is + attached. The :variable:`CMAKE_ADD_CUSTOM_COMMAND_DEPENDS_EXPLICIT_ONLY` + variable was added to enable ``DEPENDS_EXPLICIT_ONLY`` on all calls to + :command:`add_custom_command` command. + +* The :command:`cmake_file_api` command was added for projects to add + :manual:`CMake file API <cmake-file-api(7)>` queries for the current + CMake run. + +* The :command:`find_package` command now searches prefixes specified by + upper-case :variable:`<PACKAGENAME>_ROOT` CMake variables and upper-case + :envvar:`<PACKAGENAME>_ROOT` environment variables. + See policy :policy:`CMP0144`. + +* The :command:`install(CODE)` and :command:`install(SCRIPT)` commands + now support the :genex:`$<INSTALL_PREFIX>` generator expression. + +Variables +--------- * The :variable:`CMAKE_DLL_NAME_WITH_SOVERSION` variable and associated :prop_tgt:`DLL_NAME_WITH_SOVERSION` target property were added to optionally append the :prop_tgt:`SOVERSION` to the filename of the ``.dll`` part of a shared library on Windows. -* The ``update`` and ``patch`` steps of an :module:`ExternalProject` will now - always re-execute if any of their details change, even if - ``UPDATE_DISCONNECTED`` was set to true in the call to - :command:`ExternalProject_Add`. If using the GIT download method and the - ``GIT_TAG`` is changed and the new ``GIT_TAG`` isn't already known locally, - this is now a fatal error instead of silently using the previous ``GIT_TAG``. +* Variables :variable:`CMAKE_VS_DEBUGGER_COMMAND`, + :variable:`CMAKE_VS_DEBUGGER_COMMAND_ARGUMENTS`, + :variable:`CMAKE_VS_DEBUGGER_ENVIRONMENT`, and + :variable:`CMAKE_VS_DEBUGGER_WORKING_DIRECTORY` were added to initialize + corresponding target properties. -* When ``UPDATE_DISCONNECTED`` is set to true in a call to - :command:`ExternalProject_Add`, the ``configure`` step will no longer - re-run on every build. It will only re-run if details of the ``download``, - ``update`` or ``patch`` step change. +* The :variable:`CMAKE_VS_WINDOWS_TARGET_PLATFORM_MIN_VERSION` variable + was added to initialize the :prop_tgt:`VS_WINDOWS_TARGET_PLATFORM_MIN_VERSION` + target property on all targets when they are created. -* The :module:`ExternalProject` and :module:`FetchContent` modules - now resolve relative `GIT_REPOSITORY` paths as relative to the - parent project's remote, not as a relative local file system path. - See :policy:`CMP0150`. +Properties +---------- -* The :manual:`cmake-file-api(7)` "codemodel" version 2 ``version`` field has - been updated to 2.6. -* The :manual:`cmake-file-api(7)` "codemodel" version 2 "target" object gained - a new "frameworks" field in the "compileGroups" objects. +* A :prop_tgt:`CUDA_CUBIN_COMPILATION` target property was added to + :ref:`Object Libraries` to support compiling to ``.cubin`` files + instead of host object files. Currently only supported with NVIDIA. -* The :command:`cmake_file_api` command was added, enabling projects to - add :manual:`CMake file API <cmake-file-api(7)>` queries for the current - CMake run. +* A :prop_tgt:`CUDA_FATBIN_COMPILATION` target property was added to + :ref:`Object Libraries` to support compiling to ``.fatbin`` files + instead of host object files. Currently only supported with NVIDIA. +* A :prop_tgt:`CUDA_OPTIX_COMPILATION` target property was added to + :ref:`Object Libraries` to support compiling to ``.optixir`` files + instead of host object files. Currently only supported with NVIDIA. -* The :command:`file(GET_RUNTIME_DEPENDENCIES)` command now case-preserves - DLL names reported on Windows. They are still converted to lowercase - for filter matching. +* The :prop_tgt:`<LANG>_CLANG_TIDY`, :prop_tgt:`<LANG>_CPPCHECK`, + :prop_tgt:`<LANG>_CPPLINT`, and :prop_tgt:`<LANG>_INCLUDE_WHAT_YOU_USE`, + target properties now support + :manual:`generator expressions <cmake-generator-expressions(7)>`. + +* The :prop_tgt:`<LANG>_LINKER_LAUNCHER` target property now supports + :manual:`generator expressions <cmake-generator-expressions(7)>`. + +* The :prop_sf:`SKIP_LINTING` source file property was added to suppress + target-wide code checks on specific sources. -* The :module:`FindCUDA` module has been fully deprecated via policy - :policy:`CMP0146`. Port projects to CMake's first-class ``CUDA`` - language support. +Modules +------- -* The :module:`FindCUDAToolkit` module now provides an imported target for ``cudla``, if found. +* The :module:`FindCUDAToolkit` module now provides an imported target for + ``cudla``, if found. -* The :module:`FindDoxygen` module's ``doxygen_add_docs`` command gained +* The :module:`FindDoxygen` module's :command:`doxygen_add_docs` command gained a ``CONFIG_FILE`` option to specify a custom doxygen configuration file. * The :module:`FindOpenGL` module gained support for components ``GLES2`` and ``GLES3``. -* The :command:`find_package` command now searches prefixes specified by - upper-case :variable:`<PACKAGENAME>_ROOT` CMake variables and upper-case - :envvar:`<PACKAGENAME>_ROOT` environment variables. - See policy :policy:`CMP0144`. - -* :module:`FindPython`, :module:`FindPython2` and :module:`FindPython3` modules - learn to manage ``Windows/ARM`` platform. - * The :module:`FindwxWidgets` module now provides an imported target. -* The :genex:`COMPILE_ONLY` generator expression has been added which provides +Generator Expressions +--------------------- + +* The :genex:`COMPILE_ONLY` generator expression was added to specify compilation usage requirements without any linking requirements. -* The :genex:`LIST` generator expression was added to manage lists. +* ``$<LIST:...>`` generator expressions were added for + :ref:`query <GenEx List Queries>`, + :ref:`transformation <GenEx List Transformations>`, and + :ref:`ordering <GenEx List Ordering>` operations on + :ref:`lists <CMake Language Lists>`. -* The :command:`install(CODE)` and :command:`install(SCRIPT)` commands - now support the :genex:`$<INSTALL_PREFIX>` generator expression. +* ``$<PATH:...>`` generator expressions for + :ref:`decomposition <GenEx Path Decomposition>` and + :ref:`transformation <GenEx Path Transformations>` operations learned + to process :ref:`lists <CMake Language Lists>` of paths element-wise. -* The :prop_tgt:`<LANG>_LINKER_LAUNCHER` target property now supports - :manual:`generator expressions <cmake-generator-expressions(7)>`. +Autogen +------- -* The :prop_tgt:`<LANG>_CLANG_TIDY`, :prop_tgt:`<LANG>_CPPCHECK`, - :prop_tgt:`<LANG>_CPPLINT`, and :prop_tgt:`<LANG>_INCLUDE_WHAT_YOU_USE`, - target properties now support - :manual:`generator expressions <cmake-generator-expressions(7)>`. +* The :variable:`CMAKE_AUTOMOC_EXECUTABLE`, + :variable:`CMAKE_AUTORCC_EXECUTABLE`, and + :variable:`CMAKE_AUTOUIC_EXECUTABLE` variables were added to initialize the + corresponding target properties as targets are created. -* The :command:`add_custom_command` command gained a new - ``DEPENDS_EXPLICIT_ONLY`` option to tell the :ref:`Ninja Generators` - not to add any dependencies implied by the target to which it is - attached. +* The :prop_tgt:`AUTOGEN_USE_SYSTEM_INCLUDE` target property and + corresponding :variable:`CMAKE_AUTOGEN_USE_SYSTEM_INCLUDE` variable were + added to explicitly control whether autogen headers are + considered system headers. -* The :variable:`CMAKE_ADD_CUSTOM_COMMAND_DEPENDS_EXPLICIT_ONLY` variable can - be set to enable ``DEPENDS_EXPLICIT_ONLY`` in all uses of - :command:`add_custom_command` command. +* The :prop_tgt:`INTERFACE_AUTOMOC_MACRO_NAMES` target property was added to + specify macro names for ``moc`` as a transitive usage requirement. -* The :genex:`$<PATH>` generator expression learned to process list of paths - for decomposition and transformation operations. +CTest +----- -* :manual:`cmake-presets(7)` files now support schema version ``7``. +* The :prop_test:`TIMEOUT_SIGNAL_NAME` and + :prop_test:`TIMEOUT_SIGNAL_GRACE_PERIOD` test properties were added + to specify a POSIX signal to send to a test process when its timeout + is reached. -* :manual:`cmake-presets(7)` now supports ``$penv{}`` macro expansion - in ``include`` fields. +CPack +----- -* The :module:`Dart` and :module:`FindDart` modules have been deprecated via - policy :policy:`CMP0145`. Port projects to the :module:`CTest` module. +* The :cpack_gen:`CPack Inno Setup Generator` was added to package using + Inno Setup. -* The :module:`FindPythonInterp` and :module:`FindPythonLibs` modules have - been fully deprecated via policy :policy:`CMP0148`. Port projects to - :module:`FindPython3`, :module:`FindPython2`, or :module:`FindPython`. +Deprecated and Removed Features +=============================== -* The :prop_sf:`SKIP_LINTING` source file property was added to suppress - target-wide code checks on specific sources. +* Compatibility with versions of CMake older than 3.5 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:`SYSTEM` target property is now honored for Apple Frameworks. +* The :ref:`Extra Generators` have been deprecated. IDEs may use the + :manual:`cmake-file-api(7)` to view CMake-generated project build trees. -* GNU (and GNU-compatible) linkers gained support for a ``--dependency-file`` - flag in GNU Binutils 2.35 and LLVM's LLD 12.0.0. The - :ref:`Makefile <Makefile Generators>` and :ref:`Ninja <Ninja Generators>` - generators will now add these flags so that files read by the linker will - cause a relink if they change (typically modified timestamps). +* The :module:`FindCUDA` module, which has been deprecated since CMake 3.10, + has been removed by policy :policy:`CMP0146`. Port projects to CMake's + first-class ``CUDA`` language support. - This feature can be controlled by the variable - :variable:`CMAKE_LINK_DEPENDS_USE_LINKER`. +* The :module:`FindPythonInterp` and :module:`FindPythonLibs` modules, + which have been deprecated since CMake 3.12, have been removed by + policy :policy:`CMP0148`. Port projects to :module:`FindPython3`, + :module:`FindPython2`, or :module:`FindPython`. + +* The :module:`Dart` and :module:`FindDart` modules have been deprecated via + policy :policy:`CMP0145`. Port projects to the :module:`CTest` module. * The :generator:`Visual Studio 9 2008` generator is now deprecated and will be removed in a future version of CMake. -* :ref:`Visual Studio Generators`, for VS 15.8 (2017) and newer, now - build custom commands in parallel. See policy :policy:`CMP0147`. +Other Changes +============= -* Variables :variable:`CMAKE_VS_DEBUGGER_COMMAND`, - :variable:`CMAKE_VS_DEBUGGER_COMMAND_ARGUMENTS`, - :variable:`CMAKE_VS_DEBUGGER_ENVIRONMENT`, and - :variable:`CMAKE_VS_DEBUGGER_WORKING_DIRECTORY` were added to initialize - corresponding target properties. +* ``cmake --build $dir --verbose`` will now print the working directory and + command line used to perform the build. -* The :ref:`Visual Studio Generators` for VS 2015 and above learned to - select the Windows SDK version explicitly using a ``version=`` field - in the :variable:`CMAKE_GENERATOR_PLATFORM` variable. - See :ref:`Visual Studio Platform Selection`. +* The :module:`ExternalProject` and :module:`FetchContent` modules + now resolve relative ``GIT_REPOSITORY`` paths as relative to the + parent project's remote, not as a relative local file system path. + See :policy:`CMP0150`. -* The :variable:`CMAKE_VS_WINDOWS_TARGET_PLATFORM_MIN_VERSION` variable - was added to initialize the :prop_tgt:`VS_WINDOWS_TARGET_PLATFORM_MIN_VERSION` - target property on all targets when they are created. +* The :module:`ExternalProject` ``configure`` step no longer re-runs on + every build when the ``UPDATE_DISCONNECTED`` option is enabled. + It will only re-run if details of the ``download``, ``update``, + or ``patch`` step change. + +* The :module:`ExternalProject` ``update`` and ``patch`` steps now always + re-run if any of their details change, even if the ``UPDATE_DISCONNECTED`` + option is enabled. If using the ``GIT`` download method, and the ``GIT_TAG`` + is changed to a commit that is not already known locally, an error is now + issued instead of silently using the previous ``GIT_TAG``. + +* The :module:`FindPython`, :module:`FindPython2` and :module:`FindPython3` + modules now support the Windows ARM64 platform. + +* The :command:`file(GET_RUNTIME_DEPENDENCIES)` command now case-preserves + DLL names reported on Windows. They are still converted to lowercase + for filter matching. + +* The :prop_tgt:`SYSTEM` target property is now honored for Apple Frameworks. + +* :ref:`Visual Studio Generators`, for VS 15.8 (2017) and newer, now + build custom commands in parallel. See policy :policy:`CMP0147`. |