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, 3.30.2¶
- These versions made no changes to documented features or interfaces. Some implementation updates were made to support ecosystem changes and/or fix regressions. 
3.30.3¶
- The - project(<PROJECT-NAME>)command now sets- <PROJECT-NAME>_SOURCE_DIR,- <PROJECT-NAME>_BINARY_DIR, and- <PROJECT-NAME>_IS_TOP_LEVELas normal variables in addition to setting them as cache entries. This is needed to preserve support for some- FetchContentuse cases under policy- CMP0169's NEW behavior.
- The - FindPythonand- FindPython3modules now define, respectively, the- Python_DEFINITIONSand- Python3_DEFINITIONSvariables on Windows to support development with the free threaded version of Python. The- INTERFACE_COMPILE_DEFINITIONStarget property is also defined for the various targets provided by these modules.
3.30.4¶
- The - project(<PROJECT-NAME>)command now sets- <PROJECT-NAME>_SOURCE_DIR,- <PROJECT-NAME>_BINARY_DIR, and- <PROJECT-NAME>_IS_TOP_LEVELas normal variables only if they are already set as cache or non-cache variables when- 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- project()with the same project name, but the implementation in this release is flawed (this release note has been retoractively 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- project()with the same project name and you use these variables.
3.30.5¶
- The - project(<PROJECT-NAME>)command now sets- <PROJECT-NAME>_SOURCE_DIR,- <PROJECT-NAME>_BINARY_DIR, and- <PROJECT-NAME>_IS_TOP_LEVELas non-cache variables only if they are already set as non-cache variables when- 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- project()with the same project name, and it addresses the bug in the implementation introduced in 3.30.4.
