# CMake 3.30.0-rc1 is ready for testing

**URL:** https://discourse.cmake.org/t/cmake-3-30-0-rc1-is-ready-for-testing/10976
**Category:** Announcements
**Created:** [June 7, 2024, 2:50pm UTC](https://discourse.cmake.org/t/cmake-3-30-0-rc1-is-ready-for-testing/10976 "2024-06-07T14:50:59Z")
**Posts on this page:** 1
**Page:** 1

<div class="post-metadata">

### Author: ![johnwparent](https://discourse.cmake.org/user_avatar/discourse.cmake.org/johnwparent/32/2179_2.png) [@johnwparent](https://discourse.cmake.org/u/johnwparent)
#### Post date: [June 7, 2024, 2:50pm UTC](https://discourse.cmake.org/t/cmake-3-30-0-rc1-is-ready-for-testing/10976/1 "2024-06-07T14:50:59Z")

</div>

I am proud to announce the first CMake 3.30 release candidate.  
[https://cmake.org/download/](https://cmake.org/download/)

Documentation is available at:  
[https://cmake.org/cmake/help/v3.30](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](https://cmake.org/cmake/help/v3.30/release/3.30.html)

Release milestone is available at:  
[release milestone](https://gitlab.kitware.com/cmake/cmake/-/milestones/142)

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](http://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:

## 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](http://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](http://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). 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”.
