Help/release/3.30.rst
CMake 3.30 Release Notes
.. only:: html
.. contents::
Changes made since CMake 3.29 include the following.
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.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.Visual Studio Generators now add UseDebugLibraries indicators to
.vcxproj files to denote which configurations are debug configurations.
See policy :policy:CMP0162.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.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_<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.
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.
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_DEBUGPython_INTERPRETERPython_DEBUG_POSTFIXnew targets:
Python::InterpreterDebugPython::InterpreterMultiConfigThe python_add_library() command now manages the
:prop_tgt:DEBUG_POSTFIX target property based on the value
of the Python_DEBUG_POSTFIX variable.
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_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 :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.
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.
: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.
Changes made since CMake 3.30.0 include the following.
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.
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.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.