CMake 3.30.0-rc2 is ready for testing

June 12, 2024

I am proud to announce the second CMake 3.30 release candidate.
https://cmake.org/download/

Documentation is available at:
https://cmake.org/cmake/help/v3.30

Release notes appear below and are also published at
https://cmake.org/cmake/help/v3.30/release/3.30.html

Release milestone is available at:
release milestone

Some of the most significant changes in CMake 3.30 are:

  • “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.

  • The “Compile Features” 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.

  • The “CMAKE_<LANG>_STANDARD_LATEST” variable was added to describe
    the latest “<LANG>” language standard CMake supports for the
    selected compiler.

  • The “CMAKE_TLS_VERSION” variable and “CMAKE_TLS_VERSION” environment
    variable were added to specify a default minimum TLS version for
    connections to “https://” URLs by the “file(DOWNLOAD)” and
    “file(UPLOAD)” commands.

  • The “GENERATED” source file property is now visible in all
    directories. See policy “CMP0163”. Policy “CMP0118″‘s
    documentation has been revised to describe its actual effects.

  • The “FindPython”, “FindPython2”, and “FindPython3” modules, on
    Windows, now offer better support for the Python debug variant.

  • The “TARGET_PROPERTY” generator expression learned to evaluate
    custom transitive properties defined by new
    “TRANSITIVE_COMPILE_PROPERTIES” and “TRANSITIVE_LINK_PROPERTIES”
    target properties.

  • The “CPack WIX Generator” gained support for WiX Toolset v4. See the
    “CPACK_WIX_VERSION” variable.

  • The “FindBoost” module has been removed by policy “CMP0167”. Port
    projects to upstream Boost’s “BoostConfig.cmake” package
    configuration file, for which “find_package(Boost)” now searches.

  • The precompiled Windows “.msi” installers provided on cmake.org,
    when performing a fresh installation, now modify the system-wide
    “PATH” by default.

CMake 3.30 Release Notes
************************

Changes made since CMake 3.29 include the following.


New Features
============


Presets
-------

* "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 "cmake-file-api(7)" "cmakeFiles" version 1 object's "version"
  field has been updated to 1.1.  It gained a "globsDependent" field
  to report "file(GLOB)" calls using "CONFIGURE_DEPENDS".


Generators
----------

* Visual Studio Generators now add "UseDebugLibraries" indicators to
  ".vcxproj" files to denote which configurations are debug
  configurations. See policy "CMP0162".


Languages
---------

* The "Compile Features" 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 "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
  "CMP0164".

* The "enable_language()" command now fails with an error if it is
  called before the first "project()" call. See policy "CMP0165".

* The "file(DOWNLOAD)" and "file(UPLOAD)" commands gained a
  "TLS_VERSION <min>" option to specify the minimum TLS version for
  connections to "https://" URLs.


Variables
---------

* The "CMAKE_<LANG>_STANDARD_LATEST" variable was added to describe
  the latest "<LANG>" language standard CMake supports for the
  selected compiler.

* The "CMAKE_TLS_VERIFY" environment variable was added as a fallback
  to the existing "CMAKE_TLS_VERIFY" variable.  It specifies whether
  to verify the server certificate for "https://" URLs by default.

* The "CMAKE_TLS_VERSION" variable and "CMAKE_TLS_VERSION" environment
  variable were added to specify a default minimum TLS version for
  connections to "https://" URLs by the "file(DOWNLOAD)" and
  "file(UPLOAD)" commands.

* The "CMAKE_VS_USE_DEBUG_LIBRARIES" variable and corresponding
  "VS_USE_DEBUG_LIBRARIES" target property were added to explicitly
  control "UseDebugLibraries" indicators in ".vcxproj" files.


Properties
----------

* The "GENERATED" source file property is now visible in all
  directories.  See policy "CMP0163".  Policy "CMP0118"'s
  documentation has been revised to describe its actual effects.

* The "PROPAGATE_TOP_LEVEL_INCLUDES_TO_TRY_COMPILE" global property
  can be used to propagate "CMAKE_PROJECT_TOP_LEVEL_INCLUDES" into
  "try_compile()" calls that use the whole-project signature. This is
  primarily intended as a way for dependency providers to be enabled
  in such "try_compile()" calls.

* A "VS_FILTER_PROPS" target property was added to tell Visual Studio
  Generators to use a custom MSBuild filter ".props" file.


Modules
-------

* The "ExternalProject" module's "ExternalProject_Add()" command
  gained a "TLS_VERSION <min>" option, and support for the
  "CMAKE_TLS_VERSION" variable and "CMAKE_TLS_VERSION" environment
  variable, to specify the minimum TLS version for connections to
  "https://" URLs.

* The "FindBacktrace" module now provides an imported target.

* The "FindBLAS" and "FindLAPACK" modules gained support for
  "libblastrampoline".

* The "FindCUDAToolkit" module now provides a target for "libnvfatbin"
  and "libnvfatbin_static", if found.

* The "FindCUDAToolkit" module now searches the "CMAKE_CUDA_COMPILER"
  variable and the "CUDACXX" environment variable even when the "CUDA"
  language isn't enabled.

* The "FindOpenMP" module gained an "OpenMP_RUNTIME_MSVC" option to
  control the OpenMP runtime used with MSVC.

* The "FindPython" and "FindPython3" modules gained support for the
  free threaded Python version.

* The "FindPython", "FindPython2", and "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 "DEBUG_POSTFIX"
  target property based on the value of the "Python_DEBUG_POSTFIX"
  variable.


Generator Expressions
---------------------

* The "<LANG>_COMPILER_FRONTEND_VARIANT" family of generator
  expressions were added to access the value of the associated
  "CMAKE_<LANG>_COMPILER_FRONTEND_VARIANT" variables.

* Link features, as used with the "LINK_LIBRARY" generator expression,
  gained the ability to have properties that describe their behavior
  by specifying the "CMAKE_LINK_LIBRARY_<FEATURE>_PROPERTIES" or
  "CMAKE_<LANG>_LINK_LIBRARY_<FEATURE>_PROPERTIES" variables.

* The "QUOTE" generator expression was added to evaluate to """.

* The "TARGET_PROPERTY" generator expression learned to evaluate
  custom transitive properties defined by new
  "TRANSITIVE_COMPILE_PROPERTIES" and "TRANSITIVE_LINK_PROPERTIES"
  target properties.

* The "TARGET_PROPERTY" generator expression now evaluates target
  properties "INTERFACE_LINK_OPTIONS", "INTERFACE_LINK_DIRECTORIES",
  and "INTERFACE_LINK_DEPENDS" correctly by following private
  dependencies of static libraries.  See policy "CMP0166".


CTest
-----

* The "ctest_submit()" command and "ctest -T Submit" step gained
  "TLSVersion" and "TLSVerify" options to control negotiation with
  "https://" URLs.  See the "CTEST_TLS_VERSION" and "CTEST_TLS_VERIFY"
  variables.


CPack
-----

* The "CPack Inno Setup Generator" is now available on non-Windows
  hosts.

* The "CPack NuGet Generator" can now generate dependency groups for
  framework-specific dependencies. The "CPACK_NUGET_PACKAGE_TFMS"
  variable was added to specify a list of target framework monikers
  (TFMs) for which groups should be generated.

* The "CPack WIX Generator" gained support for WiX Toolset v4. See the
  "CPACK_WIX_VERSION" variable.


Deprecated and Removed Features
===============================

* The "FindBoost" module has been removed by policy "CMP0167". Port
  projects to upstream Boost's "BoostConfig.cmake" package
  configuration file, for which "find_package(Boost)" now searches.

* Calling "FetchContent_Populate()" with just the name of a dependency
  is now deprecated. Projects should call
  "FetchContent_MakeAvailable()" instead. See policy "CMP0169".
  Calling "FetchContent_Populate()" with full population details
  rather than just a dependency name remains fully supported.

* The "Visual Studio 9 2008" generator has been removed.


Other Changes
=============

* The precompiled Windows ".msi" installers provided on cmake.org,
  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 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.

* "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). "cmake --fresh" also forces the
  download, update, and patch steps of directly populated dependencies
  to be re-executed. Policy "CMP0168" provides backward compatibility
  for those projects that still rely on using a sub-build for content
  population.

* When "FETCHCONTENT_FULLY_DISCONNECTED" is set to true,
  "FetchContent_MakeAvailable()" and the single-argument form of
  "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
  "CMP0170".

----------------------------------------------------------------------------
Changes made since CMake 3.30.0-rc1:

Brad King (4):
  ci: Update CMake version to 3.30.0-rc1
  Clang: Drop non-existent -fno-ansi-escape-codes flag
  Utilities/Release: Update MSI generation to use WIX 4
  CMake 3.30.0-rc2

Craig Scott (6):
  FetchContent,ExternalProject: Fix extra semicolons in step commands
  FetchContent: Fix typos in stamp/step file names
  Tests: Fix -direct variants of FetchContent
  Tests: RunCMake.FetchContent should not always force _deps removal
  FetchContent: Force cmake --fresh to re-execute direct population steps
  Auxiliary: Modernize bash completion for ctest and cpack

Leave a Reply