| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264 |
- CMake 3.30 Release Notes
- ************************
- .. only:: html
- .. contents::
- Changes made since CMake 3.29 include the following.
- New Features
- ============
- Presets
- -------
- * :manual:`cmake-presets(7)` files now support schema version ``9``.
- ``include`` fields now expand all macros except ``$env{}`` and
- preset-specific macros, i.e., those derived from the fields
- inside a preset's definition.
- 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.
- 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 :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 :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.
- Properties
- ----------
- * 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
- :command:`try_compile` calls that use the
- :ref:`whole-project signature <Try Compiling Whole Projects>`.
- This is primarily intended as a way for dependency providers to be enabled
- in such :command:`try_compile` calls.
- * A :prop_tgt:`VS_FILTER_PROPS` target property was added to tell
- :ref:`Visual Studio Generators` to use a custom MSBuild filter
- ``.props`` file.
- Modules
- -------
- * 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:`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>`
- variable and the :envvar:`CUDACXX` environment variable
- even when the ``CUDA`` language isn't enabled.
- * The :module:`FindOpenMP` module gained an ``OpenMP_RUNTIME_MSVC``
- option to control the OpenMP runtime used with MSVC.
- * 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:
- * ``Python_EXECUTABLE_DEBUG``
- * ``Python_INTERPRETER``
- * ``Python_DEBUG_POSTFIX``
- * new targets:
- * ``Python::InterpreterDebug``
- * ``Python::InterpreterMultiConfig``
- The ``python_add_library()`` command now manages the
- :prop_tgt:`DEBUG_POSTFIX` target property based on the value
- of the ``Python_DEBUG_POSTFIX`` variable.
- Generator Expressions
- ---------------------
- * 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 attributes that describe their behavior by
- specifying the :variable:`CMAKE_LINK_LIBRARY_<FEATURE>_ATTRIBUTES` or
- :variable:`CMAKE_<LANG>_LINK_LIBRARY_<FEATURE>_ATTRIBUTES` 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`.
- CTest
- -----
- * 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.
- CPack
- -----
- * The :cpack_gen:`CPack Inno Setup Generator` is now available
- on non-Windows hosts.
- * The :cpack_gen:`CPack NuGet Generator` gained the
- :variable:`CPACK_NUGET_PACKAGE_README`,
- :variable:`CPACK_NUGET_PACKAGE_REPOSITORY_URL`,
- :variable:`CPACK_NUGET_PACKAGE_REPOSITORY_TYPE`,
- :variable:`CPACK_NUGET_PACKAGE_REPOSITORY_BRANCH`, and
- :variable:`CPACK_NUGET_PACKAGE_REPOSITORY_COMMIT` variables.
- * 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 :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 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 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.
- * :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). :option:`cmake --fresh` also forces the download,
- update, and patch steps of directly populated dependencies to be re-executed.
- Policy :policy:`CMP0168` provides backward compatibility for those projects
- that still rely on using a sub-build for content population.
- * 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`.
- Updates
- =======
- Changes made since CMake 3.30.0 include the following.
- 3.30.1, 3.30.2
- --------------
- * These versions made no changes to documented features or interfaces.
- Some implementation updates were made to support ecosystem changes
- and/or fix regressions.
- .. 3.30.3 (unreleased)
- * The :module:`FindPython` and :module:`FindPython3` modules now define,
- respectively, the ``Python_DEFINITIONS`` and ``Python3_DEFINITIONS``
- variables on Windows to support development with the free threaded
- version of Python. The :prop_tgt:`INTERFACE_COMPILE_DEFINITIONS` target
- property is also defined for the various targets provided by these modules.
|