| 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 |
| ============= |
| |
| * :manual:`ctest(1)` now rejects unknown command-line arguments with an error. |
| Previously they were silently ignored. |
| |
| * 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 |
| ------ |
| |
| * The :command:`project(<PROJECT-NAME>)` command now sets |
| :variable:`<PROJECT-NAME>_SOURCE_DIR`, :variable:`<PROJECT-NAME>_BINARY_DIR`, |
| and :variable:`<PROJECT-NAME>_IS_TOP_LEVEL` as normal variables in addition |
| to setting them as cache entries. This is needed to preserve support for |
| some :module:`FetchContent` use cases under policy :policy:`CMP0169`'s |
| NEW behavior. |
| |
| * 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. |
| |
| 3.30.4 |
| ------ |
| |
| * The :command:`project(<PROJECT-NAME>)` command now sets |
| :variable:`<PROJECT-NAME>_SOURCE_DIR`, :variable:`<PROJECT-NAME>_BINARY_DIR`, |
| and :variable:`<PROJECT-NAME>_IS_TOP_LEVEL` as normal variables only if they |
| are already set as cache or non-cache variables when :command:`project` is |
| invoked. Cache entries by the same names are always set as before. |
| This refines 3.30.3's behavior change to restore behavior of nested |
| directories that call :command:`project` with the same project name, |
| but the implementation in this release is flawed (this release note has |
| been retroactively updated). It can result in different behavior between |
| the first and subsequent runs. Do not use CMake 3.30.4 if your project |
| contains nested calls to :command:`project` with the same project name |
| and you use these variables. |
| |
| 3.30.5 |
| ------ |
| |
| * The :command:`project(<PROJECT-NAME>)` command now sets |
| :variable:`<PROJECT-NAME>_SOURCE_DIR`, :variable:`<PROJECT-NAME>_BINARY_DIR`, |
| and :variable:`<PROJECT-NAME>_IS_TOP_LEVEL` as non-cache variables only if |
| they are already set as non-cache variables when :command:`project` is |
| invoked. Cache entries by the same names are always set as before. |
| This refines 3.30.3's behavior change to restore behavior of nested |
| directories that call :command:`project` with the same project name, |
| and it addresses the bug in the implementation introduced in 3.30.4. |
| |
| 3.30.6, 3.30.7, 3.30.8, 3.30.9 |
| ------------------------------ |
| |
| * These versions made no changes to documented features or interfaces. |
| Some implementation updates were made to support ecosystem changes |
| and/or fix regressions. |