diff options
author | Brad King <brad.king@kitware.com> | 2024-06-04 13:36:52 (GMT) |
---|---|---|
committer | Brad King <brad.king@kitware.com> | 2024-06-05 14:28:23 (GMT) |
commit | 01436f6edd5181dd154094425a601169a98bfbb8 (patch) | |
tree | 192388290d1dcf0eca788f0a3aac4c34f4b9a3d0 /Help/release/3.30.rst | |
parent | d5402283d8e5c8babd6a103ba8aa80d64afb56e1 (diff) | |
download | CMake-01436f6edd5181dd154094425a601169a98bfbb8.zip CMake-01436f6edd5181dd154094425a601169a98bfbb8.tar.gz CMake-01436f6edd5181dd154094425a601169a98bfbb8.tar.bz2 |
Help: Organize and revise 3.30 release notes
Add section headers similar to the 3.29 release notes and move each
individual bullet into an appropriate section. Revise a few bullets.
Drop the `CXX_MODULE_STD` release note since it is an experimental
feature.
Diffstat (limited to 'Help/release/3.30.rst')
-rw-r--r-- | Help/release/3.30.rst | 254 |
1 files changed, 145 insertions, 109 deletions
diff --git a/Help/release/3.30.rst b/Help/release/3.30.rst index 6225f76..a9273b6 100644 --- a/Help/release/3.30.rst +++ b/Help/release/3.30.rst @@ -7,58 +7,80 @@ CMake 3.30 Release Notes Changes made since CMake 3.29 include the following. -* On platforms that do not support shared libraries, the :command:`add_library` - command now rejects creation of shared libraries instead of automatically - converting them to static libraries. See policy :policy:`CMP0164`. +New Features +============ -* The :cpack_gen:`CPack Inno Setup Generator` is now available - on non-Windows hosts. +Presets +------- -* The :cpack_gen:`CPack NuGet Generator` can now generate dependency groups - for framework-specific dependencies. The :variable:`CPACK_NUGET_PACKAGE_TFMS` - was added to specify a list of framework TFMs for which groups should be - generated. +* :manual:`cmake-presets(7)` files now support schema version ``9``. + ``include`` fields now expand all macros except ``$env{}`` and + preset-specific macros. -* The :cpack_gen:`CPack WIX Generator` gained support for WiX Toolset v4. - See the :variable:`CPACK_WIX_VERSION` variable. +File-Based API +-------------- + +* The :manual:`cmake-file-api(7)` "cmakeFiles" version 1 object's ``version`` + field has been updated to 1.1. It gained a ``globsDependent`` field to + report :command:`file(GLOB)` calls using ``CONFIGURE_DEPENDS``. + +Generators +---------- + +* :ref:`Visual Studio Generators` now add ``UseDebugLibraries`` indicators to + ``.vcxproj`` files to denote which configurations are debug configurations. + See policy :policy:`CMP0162`. + +Languages +--------- + +* The :manual:`Compile Features <cmake-compile-features(7)>` functionality + now implements support for the ``cxx_std_26`` and ``cuda_std_26`` + meta-features to indicate that the compiler mode must be at least C++26. + These meta-features were first documented by CMake 3.25, but were not fully + implemented. + +Commands +-------- + +* The :command:`add_library` command, on platforms that do not support shared + libraries, now rejects creation of shared libraries instead of automatically + converting them to static libraries. See policy :policy:`CMP0164`. + +* The :command:`enable_language` command now fails with an error + if it is called before the first :command:`project` call. + See policy :policy:`CMP0165`. * The :command:`file(DOWNLOAD)` and :command:`file(UPLOAD)` commands gained a ``TLS_VERSION <min>`` option to specify the minimum TLS version for connections to ``https://`` URLs. -* The :variable:`CMAKE_TLS_VERSION` variable and :envvar:`CMAKE_TLS_VERSION` - environment variable were added to specify a default minimum TLS version - for connections to ``https://`` URLs by the :command:`file(DOWNLOAD)` - and :command:`file(UPLOAD)` commands. +Variables +--------- + +* The :variable:`CMAKE_<LANG>_STANDARD_LATEST` variable was added to + describe the latest ``<LANG>`` language standard CMake supports for + the selected compiler. * The :envvar:`CMAKE_TLS_VERIFY` environment variable was added as a fallback to the existing :variable:`CMAKE_TLS_VERIFY` variable. It specifies whether to verify the server certificate for ``https://`` URLs by default. -* The :module:`ExternalProject` module's :command:`ExternalProject_Add` - command gained a ``TLS_VERSION <min>`` option, and support for the - :variable:`CMAKE_TLS_VERSION` variable and :envvar:`CMAKE_TLS_VERSION` - environment variable, to specify the minimum TLS version for connections - to ``https://`` URLs. - -* The :command:`ctest_submit` command and :option:`ctest -T Submit <ctest -T>` - step gained ``TLSVersion`` and ``TLSVerify`` options to control negotiation - with ``https://`` URLs. See the :variable:`CTEST_TLS_VERSION` and - :variable:`CTEST_TLS_VERIFY` variables. +* The :variable:`CMAKE_TLS_VERSION` variable and :envvar:`CMAKE_TLS_VERSION` + environment variable were added to specify a default minimum TLS version + for connections to ``https://`` URLs by the :command:`file(DOWNLOAD)` + and :command:`file(UPLOAD)` commands. -* The :genex:`TARGET_PROPERTY` generator expression learned to evaluate - :ref:`custom transitive properties <Custom Transitive Properties>` - defined by new :prop_tgt:`TRANSITIVE_COMPILE_PROPERTIES` and - :prop_tgt:`TRANSITIVE_LINK_PROPERTIES` target properties. +* The :variable:`CMAKE_VS_USE_DEBUG_LIBRARIES` variable and corresponding + :prop_tgt:`VS_USE_DEBUG_LIBRARIES` target property were added to explicitly + control ``UseDebugLibraries`` indicators in ``.vcxproj`` files. -* The :manual:`Compile Features <cmake-compile-features(7)>` functionality - now implements support for the ``cxx_std_26`` and ``cuda_std_26`` - meta-features to indicate that the compiler mode must be at least C++26. - These meta-features were first documented by CMake 3.25, but were not fully - implemented. +Properties +---------- -* The :prop_tgt:`CXX_MODULE_STD` property may be used to control - ``import std;`` support for targets. +* The :prop_sf:`GENERATED` source file property is now visible in all + directories. See policy :policy:`CMP0163`. Policy :policy:`CMP0118`'s + documentation has been revised to describe its actual effects. * The :prop_gbl:`PROPAGATE_TOP_LEVEL_INCLUDES_TO_TRY_COMPILE` global property can be used to propagate :variable:`CMAKE_PROJECT_TOP_LEVEL_INCLUDES` into @@ -67,60 +89,40 @@ Changes made since CMake 3.29 include the following. This is primarily intended as a way for dependency providers to be enabled in such :command:`try_compile` calls. -* Calling :command:`FetchContent_Populate` with just the name of a - dependency is now deprecated. Projects should call - :command:`FetchContent_MakeAvailable` instead. See policy :policy:`CMP0169`. - Calling :command:`FetchContent_Populate` with full population details - rather than just a dependency name remains fully supported. - -* The :command:`enable_language` command now fails with an error - if it is called before the first :command:`project` call. - See policy :policy:`CMP0165`. - -* When :variable:`FETCHCONTENT_FULLY_DISCONNECTED` is set to true, - :command:`FetchContent_MakeAvailable` and the single-argument form of - :command:`FetchContent_Populate` require that the dependency's source - directory has already been populated. CMake 3.29 and earlier did not - check this requirement, but it is now enforced, subject to policy - :policy:`CMP0170`. - -* :module:`FetchContent` now prefers to populate content directly rather - than using a separate sub-build. This may significantly improve configure - times on some systems (Windows especially, but also on macOS when using - the Xcode generator). Policy :policy:`CMP0168` provides backward - compatibility for those projects that still rely on using a sub-build for - content population. +* A :prop_tgt:`VS_FILTER_PROPS` target property was added to tell + :ref:`Visual Studio Generators` to use a custom MSBuild filter + ``.props`` file. -* The :manual:`cmake-file-api(7)` "cmakeFiles" version 1 object's ``version`` - field has been updated to 1.1. +Modules +------- -* The :manual:`cmake-file-api(7)` "cmakeFiles" version 1 object gained a - ``globsDependent`` field to report :command:`file(GLOB)` calls using - ``CONFIGURE_DEPENDS``. +* The :module:`ExternalProject` module's :command:`ExternalProject_Add` + command gained a ``TLS_VERSION <min>`` option, and support for the + :variable:`CMAKE_TLS_VERSION` variable and :envvar:`CMAKE_TLS_VERSION` + environment variable, to specify the minimum TLS version for connections + to ``https://`` URLs. * The :module:`FindBacktrace` module now provides an imported target. * The :module:`FindBLAS` and :module:`FindLAPACK` modules gained support for ``libblastrampoline``. -* The :module:`FindBoost` module has been removed by policy :policy:`CMP0167`. - Port projects to upstream Boost's ``BoostConfig.cmake`` package - configuration file, for which ``find_package(Boost)`` now searches. - * The :module:`FindCUDAToolkit` module now provides a target for ``libnvfatbin`` and ``libnvfatbin_static``, if found. * The :module:`FindCUDAToolkit` module now searches the - :variable:`CMAKE_CUDA_COMPILER <CMAKE_<LANG>_COMPILER>` and - the environment variable :envvar:`CUDACXX` even when the CUDA - language isn't enabled. + :variable:`CMAKE_CUDA_COMPILER <CMAKE_<LANG>_COMPILER>` + variable and the :envvar:`CUDACXX` environment variable + even when the ``CUDA`` language isn't enabled. -* The :module:`FindOpenMP` module gained a ``OpenMP_RUNTIME_MSVC`` +* The :module:`FindOpenMP` module gained an ``OpenMP_RUNTIME_MSVC`` option to control the OpenMP runtime used with MSVC. -* The :module:`FindPython`, :module:`FindPython2` and :module:`FindPython3` - modules offer, on ``Windows`` platform, a better support of the ``Python`` - debug version: +* The :module:`FindPython` and :module:`FindPython3` modules gained + support for the free threaded Python version. + +* The :module:`FindPython`, :module:`FindPython2`, and :module:`FindPython3` + modules, on Windows, now offer better support for the Python debug variant: * new variables: @@ -133,67 +135,101 @@ Changes made since CMake 3.29 include the following. * ``Python::InterpreterDebug`` * ``Python::InterpreterMultiConfig`` - And the ``python_add_library()`` command manage the :prop_tgt:`DEBUG_POSTFIX` - target property based on the value of the ``Python_DEBUG_POSTFIX`` variable. + The ``python_add_library()`` command now manages the + :prop_tgt:`DEBUG_POSTFIX` target property based on the value + of the ``Python_DEBUG_POSTFIX`` variable. -* The :module:`FindPython`, :module:`FindPython3` modules gained the support - of the free threaded python version. +Generator Expressions +--------------------- -* Generator expressions ``$<<LANG>_COMPILER_FRONTEND_VARIANT:...>`` were added that allow - access to the value of the associated :variable:`CMAKE_<LANG>_COMPILER_FRONTEND_VARIANT` - variables. +* The :genex:`<LANG>_COMPILER_FRONTEND_VARIANT <C_COMPILER_FRONTEND_VARIANT>` + family of generator expressions were added to access the value of the + associated :variable:`CMAKE_<LANG>_COMPILER_FRONTEND_VARIANT` variables. * Link features, as used with the :genex:`LINK_LIBRARY` generator expression, gained the ability to have properties that describe their behavior by specifying the :variable:`CMAKE_LINK_LIBRARY_<FEATURE>_PROPERTIES` or :variable:`CMAKE_<LANG>_LINK_LIBRARY_<FEATURE>_PROPERTIES` variables. +* The :genex:`QUOTE` generator expression was added to evaluate to ``"``. + +* The :genex:`TARGET_PROPERTY` generator expression learned to evaluate + :ref:`custom transitive properties <Custom Transitive Properties>` + defined by new :prop_tgt:`TRANSITIVE_COMPILE_PROPERTIES` and + :prop_tgt:`TRANSITIVE_LINK_PROPERTIES` target properties. + * The :genex:`TARGET_PROPERTY` generator expression now evaluates target properties :prop_tgt:`INTERFACE_LINK_OPTIONS`, :prop_tgt:`INTERFACE_LINK_DIRECTORIES`, and :prop_tgt:`INTERFACE_LINK_DEPENDS` correctly by following private dependencies of static libraries. See policy :policy:`CMP0166`. -* The :genex:`$<QUOTE>` generator expression was added to evaluate to ``"``. +CTest +----- -* The :variable:`CMAKE_<LANG>_STANDARD_LATEST` variable was added to - describe the latest supported standard of language ``<LANG>``. +* The :command:`ctest_submit` command and :option:`ctest -T Submit <ctest -T>` + step gained ``TLSVersion`` and ``TLSVerify`` options to control negotiation + with ``https://`` URLs. See the :variable:`CTEST_TLS_VERSION` and + :variable:`CTEST_TLS_VERIFY` variables. -* :manual:`cmake-presets(7)` files now support schema version ``9``: +CPack +----- - * ``include`` fields now expand all macros except ``$env{}`` and - preset-specific macros. +* The :cpack_gen:`CPack Inno Setup Generator` is now available + on non-Windows hosts. -* The durations printed after "Configuring done" and "Generating done" - messages now reflect time spent in generator-specific steps, and - in a code model evaluation step at the beginning of generation that - was not previously captured. Printed durations may appear longer - than in previous versions of CMake. +* The :cpack_gen:`CPack NuGet Generator` can now generate dependency groups + for framework-specific dependencies. The :variable:`CPACK_NUGET_PACKAGE_TFMS` + variable was added to specify a list of target framework monikers (TFMs) + for which groups should be generated. -* The :prop_sf:`GENERATED` source file property is now visible in all - directories. See policy :policy:`CMP0163`. Policy :policy:`CMP0118`'s - documentation has been revised to describe its actual effects. +* The :cpack_gen:`CPack WIX Generator` gained support for WiX Toolset v4. + See the :variable:`CPACK_WIX_VERSION` variable. + +Deprecated and Removed Features +=============================== + +* The :module:`FindBoost` module has been removed by policy :policy:`CMP0167`. + Port projects to upstream Boost's ``BoostConfig.cmake`` package + configuration file, for which ``find_package(Boost)`` now searches. + +* Calling :command:`FetchContent_Populate` with just the name of a + dependency is now deprecated. Projects should call + :command:`FetchContent_MakeAvailable` instead. See policy :policy:`CMP0169`. + Calling :command:`FetchContent_Populate` with full population details + rather than just a dependency name remains fully supported. + +* The :generator:`Visual Studio 9 2008` generator has been removed. + +Other Changes +============= * The precompiled Windows ``.msi`` installers provided on `cmake.org <https://cmake.org/download/>`_, when performing a fresh installation, now modify the system-wide ``PATH`` by default. - When replacing an existing installation, the ``PATH`` modification - preference is preserved by default. + When replacing an existing installation of 3.30 or later, the ``PATH`` + modification preference is preserved by default. * The official ``.zip`` source archive provided on `cmake.org <https://cmake.org/download/>`_ now uses LF newlines, instead of CRLF newlines, for consistency with modern conventions. -* The :generator:`Visual Studio 9 2008` generator has been removed. - -* A :prop_tgt:`VS_FILTER_PROPS` target property was added to tell - :ref:`Visual Studio Generators` for VS 2010 and above to use a - custom MSBuild filter ``.props`` file. +* The durations printed after "Configuring done" and "Generating done" + messages now reflect time spent in generator-specific steps, and + in a code model evaluation step at the beginning of generation that + was not previously captured. Printed durations may appear longer + than in previous versions of CMake, but are more accurate. -* :ref:`Visual Studio Generators` now add ``UseDebugLibraries`` indicators to - ``.vcxproj`` files to denote which configurations are debug configurations. - See policy :policy:`CMP0162`. +* :module:`FetchContent` now prefers to populate content directly rather + than using a separate sub-build. This may significantly improve configure + times on some systems (Windows especially, but also on macOS when using + the Xcode generator). Policy :policy:`CMP0168` provides backward + compatibility for those projects that still rely on using a sub-build for + content population. -* The :variable:`CMAKE_VS_USE_DEBUG_LIBRARIES` variable and corresponding - :prop_tgt:`VS_USE_DEBUG_LIBRARIES` target property were added to explicitly - control ``UseDebugLibraries`` indicators in ``.vcxproj`` files. +* When :variable:`FETCHCONTENT_FULLY_DISCONNECTED` is set to true, + :command:`FetchContent_MakeAvailable` and the single-argument form of + :command:`FetchContent_Populate` require that the dependency's source + directory has already been populated. CMake 3.29 and earlier did not + check this requirement, but it is now enforced, subject to policy + :policy:`CMP0170`. |