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.- includefields 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- versionfield has been updated to 1.1. It gained a- globsDependentfield to report- file(GLOB)calls using- CONFIGURE_DEPENDS.
Generators¶
- Visual Studio Generators now add - UseDebugLibrariesindicators to- .vcxprojfiles to denote which configurations are debug configurations. See policy- CMP0162.
Languages¶
- The - Compile Featuresfunctionality now implements support for the- cxx_std_26and- cuda_std_26meta-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_LATESTvariable was added to describe the latest- <LANG>language standard CMake supports for the selected compiler.
- The - CMAKE_TLS_VERIFYenvironment variable was added as a fallback to the existing- CMAKE_TLS_VERIFYvariable. It specifies whether to verify the server certificate for- https://URLs by default.
- The - CMAKE_TLS_VERSIONvariable and- CMAKE_TLS_VERSIONenvironment 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_LIBRARIESvariable and corresponding- VS_USE_DEBUG_LIBRARIEStarget property were added to explicitly control- UseDebugLibrariesindicators in- .vcxprojfiles.
Properties¶
- The - GENERATEDsource 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_COMPILEglobal property can be used to propagate- CMAKE_PROJECT_TOP_LEVEL_INCLUDESinto- 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_PROPStarget property was added to tell Visual Studio Generators to use a custom MSBuild filter- .propsfile.
Modules¶
- The - ExternalProjectmodule's- ExternalProject_Add()command gained a- TLS_VERSION <min>option, and support for the- CMAKE_TLS_VERSIONvariable and- CMAKE_TLS_VERSIONenvironment variable, to specify the minimum TLS version for connections to- https://URLs.
- The - FindBacktracemodule now provides an imported target.
- The - FindBLASand- FindLAPACKmodules gained support for- libblastrampoline.
- The - FindCUDAToolkitmodule now provides a target for- libnvfatbinand- libnvfatbin_static, if found.
- The - FindCUDAToolkitmodule now searches the- CMAKE_CUDA_COMPILERvariable and the- CUDACXXenvironment variable even when the- CUDAlanguage isn't enabled.
- The - FindOpenMPmodule gained an- OpenMP_RUNTIME_MSVCoption to control the OpenMP runtime used with MSVC.
- The - FindPythonand- FindPython3modules gained support for the free threaded Python version.
- The - FindPython,- FindPython2, and- FindPython3modules, 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_POSTFIXtarget property based on the value of the- Python_DEBUG_POSTFIXvariable.
Generator Expressions¶
- The - <LANG>_COMPILER_FRONTEND_VARIANTfamily of generator expressions were added to access the value of the associated- CMAKE_<LANG>_COMPILER_FRONTEND_VARIANTvariables.
- Link features, as used with the - LINK_LIBRARYgenerator expression, gained the ability to have attributes that describe their behavior by specifying the- CMAKE_LINK_LIBRARY_<FEATURE>_ATTRIBUTESor- CMAKE_<LANG>_LINK_LIBRARY_<FEATURE>_ATTRIBUTESvariables.
- The - QUOTEgenerator expression was added to evaluate to- ".
- The - TARGET_PROPERTYgenerator expression learned to evaluate custom transitive properties defined by new- TRANSITIVE_COMPILE_PROPERTIESand- TRANSITIVE_LINK_PROPERTIEStarget properties.
- The - TARGET_PROPERTYgenerator expression now evaluates target properties- INTERFACE_LINK_OPTIONS,- INTERFACE_LINK_DIRECTORIES, and- INTERFACE_LINK_DEPENDScorrectly by following private dependencies of static libraries. See policy- CMP0166.
CTest¶
- The - ctest_submit()command and- ctest -T Submitstep gained- TLSVersionand- TLSVerifyoptions to control negotiation with- https://URLs. See the- CTEST_TLS_VERSIONand- CTEST_TLS_VERIFYvariables.
CPack¶
- The - CPack Inno Setup Generatoris now available on non-Windows hosts.
- The - CPack NuGet Generatorgained the- CPACK_NUGET_PACKAGE_README,- CPACK_NUGET_PACKAGE_REPOSITORY_URL,- CPACK_NUGET_PACKAGE_REPOSITORY_TYPE,- CPACK_NUGET_PACKAGE_REPOSITORY_BRANCH, and- CPACK_NUGET_PACKAGE_REPOSITORY_COMMITvariables.
- The - CPack NuGet Generatorcan now generate dependency groups for framework-specific dependencies. The- CPACK_NUGET_PACKAGE_TFMSvariable was added to specify a list of target framework monikers (TFMs) for which groups should be generated.
- The - CPack WIX Generatorgained support for WiX Toolset v4. See the- CPACK_WIX_VERSIONvariable.
Deprecated and Removed Features¶
- The - FindBoostmodule has been removed by policy- CMP0167. Port projects to upstream Boost's- BoostConfig.cmakepackage 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 2008generator has been removed.
Other Changes¶
- The precompiled Windows - .msiinstallers provided on cmake.org, when performing a fresh installation, now modify the system-wide- PATHby default. When replacing an existing installation of 3.30 or later, the- PATHmodification preference is preserved by default.
- The official - .zipsource 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. 
- FetchContentnow 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 --freshalso forces the download, update, and patch steps of directly populated dependencies to be re-executed. Policy- CMP0168provides backward compatibility for those projects that still rely on using a sub-build for content population.
- When - FETCHCONTENT_FULLY_DISCONNECTEDis 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.
Updates¶
Changes made since CMake 3.30.0 include the following.
3.30.1¶
- This version made no changes to documented features or interfaces. Some implementation updates were made to support ecosystem changes and/or fix regressions. 
