# CMake 3.30.0-rc3 is ready for testing

**URL:** https://discourse.cmake.org/t/cmake-3-30-0-rc3-is-ready-for-testing/11022
**Category:** Announcements
**Created:** [June 14, 2024, 2:22pm UTC](https://discourse.cmake.org/t/cmake-3-30-0-rc3-is-ready-for-testing/11022 "2024-06-14T14:22:10Z")
**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 14, 2024, 2:22pm UTC](https://discourse.cmake.org/t/cmake-3-30-0-rc3-is-ready-for-testing/11022/1 "2024-06-14T14:22:11Z")

</div>

I am proud to announce the third 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). “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-rc2:

Brad King (4):

- Tests: Update expected results for Xcode 16
- ctest: Fix spurious build failures with CTEST\_USE\_LAUNCHERS on Windows
- VS: Quote custom command arguments containing semicolons
- CMake 3.30.0-rc3

Craig Scott (2):

- Help: Fix nuget example with unwanted comment and bad use of rst link
- Help: Minor grammar and formatting cleanup
