CMake 3.30.0-rc4 is ready for testing
I am proud to announce the fourth CMake 3.30 release candidate.
https://cmake.org/download/
Documentation is available at:
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
Release milestone is available at:
release milestone
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,
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: * 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_POSTFIX" target property based on the value of the "Python_DEBUG_POSTFIX" variable. 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 attributes that describe their behavior by specifying the "CMAKE_LINK_LIBRARY_<FEATURE>_ATTRIBUTES" or "CMAKE_<LANG>_LINK_LIBRARY_<FEATURE>_ATTRIBUTES" 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" gained 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_COMMIT" variables. * 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, 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 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-rc3: Adrian DC (1): CPack/RPM: Fix debuginfo permissions check Alex Turbov (7): Help: Reorder variables as they mentioned in the official spec Help: CPack/NuGet add deprecation notes according to the current spec Help: CPack/NuGet fix `versionadded` position Help: CPack/NuGet add description to the added variables Help: CPack/NuGet add `:Supported:` to some variables Help: CPack/NuGet avoid deprecated variables in the usage example Help: Mention CPack/NuGet additions in the 3.30 release notes Brad King (9): ci: Update CMake version to 3.30.0-rc3 cmGlobalNinjaGenerator: De-duplicate CMAKE_CONFIGURATION_TYPES lookup cmGlobalNinjaGenerator: Factor out helper for global config list lookup cmGlobalNinjaGenerator: Reuse local generator caching of config list Ninja Multi-Config: Fix crash if config list is changed in subdirectory libuv: macos: reap child processes more reliably when using kqueue libuv: macos: restore use of kqueue instead of posix poll VS: Fix '-T version=14.4x' under VS 17.1x CMake 3.30.0-rc4 Craig Scott (1): Help: Improve link library feature properties docs Marc Chevrier (2): Libraries processing: update configuration wording Link feature attributes: stabilization eutro (1): cmake-mode.el: fix bracket string/comment syntax-propertize