[ANNOUNCE] CMake 4.1.0-rc1 is ready for testing
John Parent
john.parent at kitware.com
Thu Jun 26 16:52:24 BST 2025
I am proud to announce the first CMake 4.1 release candidate.
https://cmake.org/download/
Documentation is available at:
https://cmake.org/cmake/help/v4.1
Release notes appear below and are also published at
https://cmake.org/cmake/help/v4.1/release/4.1.html
Release milestone is available at:
https://gitlab.kitware.com/cmake/cmake/-/milestones/171
Some of the most significant changes in CMake 4.1 are:
* The "cmake-configure-log(7)" now reports events from
"find_package()" (in "CONFIG" mode), "find_path()", "find_file()",
"find_library()", and "find_program()" commands when first invoked,
when their results transition between "not found" and "found", or
when enabled explicitly by the "--debug-find" command-line option.
* The "cmake_pkg_config()" command now supports the "IMPORT" and
"POPULATE" subcommands for interfacing CMake targets with pkg-config
based dependencies.
* The "CMAKE_FIND_REQUIRED" variable was added to tell
"find_package()", "find_path()", "find_file()", "find_library()",
and "find_program()" to be "REQUIRED" by default. The commands also
gained an "OPTIONAL" keyword to ignore the variable for a specific
call.
* The "FindBLAS" and "FindLAPACK" modules now support the NVIDIA
Performance Libraries (NVPL).
* The "string(REGEX MATCHALL)", "string(REGEX REPLACE)", and
"list(TRANSFORM REPLACE)" commands now match the regular expression
"^" anchor at most once in repeated searches, at the start of the
input. See policy "CMP0186".
* The "TARGET_PROPERTY" generator expression now evaluates the
"LINK_LIBRARIES" and "INTERFACE_LINK_LIBRARIES" target properties
transitively. See policy "CMP0189".
CMake 4.1 Release Notes
***********************
Changes made since CMake 4.0 include the following.
New Features
============
File-Based API
--------------
* The "cmake-file-api(7)" v1 now writes partial replies when
buildsystem generation fails with an error. See the v1 Reply Error
Index.
Generators
----------
* Makefile Generators and Ninja Generators gained support for adding a
linker launcher with "Fortran", "CUDA", and "HIP". See the
"CMAKE_<LANG>_LINKER_LAUNCHER" variable and "<LANG>_LINKER_LAUNCHER"
target property for details.
Command-Line
------------
* The cmake --build command-line tool, when used with the "Xcode"
generator, now detects when a third-party tool has wrapped the
generated ".xcodeproj" in a ".xcworkspace", and drives the build
through the workspace instead.
Configure Log
-------------
* The "cmake-configure-log(7)" now reports events from
"find_package()" (in "CONFIG" mode), "find_path()", "find_file()",
"find_library()", and "find_program()" commands when first invoked,
when their results transition between "not found" and "found", or
when enabled explicitly by the "--debug-find" command-line option.
See Event Kind find and Event Kind find_package. Logging may also
be controlled by the "CMAKE_FIND_DEBUG_MODE" and
"CMAKE_FIND_DEBUG_MODE_NO_IMPLICIT_CONFIGURE_LOG" variables.
Compilers
---------
* Diab compilers from Wind River Systems, versions 5.9.x+, are now
supported with "compiler id" "Diab" for languages "ASM", "C", and
"CXX".
Commands
--------
* The "add_dependencies()" command may be called with no dependencies.
* The "cmake_pkg_config()" command now supports the "IMPORT" and
"POPULATE" subcommands for interfacing CMake targets with pkg-config
based dependencies.
* The "install(DIRECTORY)" command gained a new
"EXCLUDE_EMPTY_DIRECTORIES" option to skip installation of empty
directories.
* The "project()" command now has experimental support for the
"COMPAT_VERSION" keyword, gated by
"CMAKE_EXPERIMENTAL_EXPORT_PACKAGE_INFO".
Variables
---------
* The "CMAKE_FIND_REQUIRED" variable was added to tell
"find_package()", "find_path()", "find_file()", "find_library()",
and "find_program()" to be "REQUIRED" by default. The commands also
gained an "OPTIONAL" keyword to ignore the variable for a specific
call.
* The "CMAKE_<LANG>_COMPILER_ARCHITECTURE_ID" variable is now
populated for most compilers, and documented for public use.
* The "CMAKE_<LANG>_ICSTAT" variable and corresponding "<LANG>_ICSTAT"
target property were added to tell the Makefile Generators and the
Ninja Generators to run the IAR "icstat" tool along with the
compiler for "C" and "CXX" languages.
Environment Variables
---------------------
* The "CMAKE_<LANG>_IMPLICIT_LINK_LIBRARIES_EXCLUDE" environment
variable was added to optionally exclude specific libraries from the
detected set of "CMAKE_<LANG>_IMPLICIT_LINK_LIBRARIES".
Properties
----------
* The "AUTOMOC_INCLUDE_DIRECTORIES" target property and associated
"CMAKE_AUTOMOC_INCLUDE_DIRECTORIES" variable were added to override
the automatic discovery of moc includes from a target's transitive
include directories.
* The "MACOSX_PACKAGE_LOCATION" source file property now works when
set on a source directory, and copies its entire tree into the
bundle.
* The "PDB_NAME" and "COMPILE_PDB_NAME" target properties now support
"generator expressions".
Modules
-------
* The "FindASPELL" module now provides a version variable, imported
targets, and components to optionally select the Aspell library and
executable separately.
* The "FindBLAS" and "FindLAPACK" modules now support the NVIDIA
Performance Libraries (NVPL).
* The "FindProtobuf" module's "protobuf_generate(DEPENDENCIES)"
command argument now accepts multiple values.
* The "FindProtobuf" module's "protobuf_generate_cpp()" and
"protobuf_generate_python()" commands, together with their
"Protobuf_IMPORT_DIRS" and "PROTOBUF_GENERATE_CPP_APPEND_PATH" hint
variables, are now deprecated in favor of the "protobuf_generate()"
command.
Regular Expressions
-------------------
* The "string(REGEX MATCHALL)", "string(REGEX REPLACE)", and
"list(TRANSFORM REPLACE)" commands now match the regular expression
"^" anchor at most once in repeated searches, at the start of the
input. See policy "CMP0186".
* The "string(REGEX REPLACE)" command now allows references to
unmatched groups. They are replaced with empty strings.
* The "string(REGEX MATCH)", "string(REGEX MATCHALL)", and
"string(REGEX REPLACE)" commands now allow zero-length matches.
CTest
-----
* "ctest(1)" gained a "--schedule-random-seed" option to specify a
numeric random seed to make "ctest --schedule-random" deterministic
for reproduction.
CPack
-----
* The "CPack NuGet Generator" gained option
"CPACK_NUGET_SYMBOL_PACKAGE" to generate NuGet symbol packages
containing PDB files.
* The "CPack RPM Generator" gained "CPACK_RPM_PACKAGE_ENHANCES",
"CPACK_RPM_PACKAGE_RECOMMENDS", and "CPACK_RPM_PACKAGE_SUPPLEMENTS"
variables to specify the corresponding RPM spec fields.
Deprecated and Removed Features
===============================
* The "FindGTest" module's result variables "GTEST_INCLUDE_DIRS",
"GTEST_LIBRARIES", "GTEST_MAIN_LIBRARIES", and
"GTEST_BOTH_LIBRARIES" are now deprecated in favor of using
"GTest::gtest" and "GTest::gtest_main" imported targets.
* The "FindGCCXML" module has been deprecated via policy "CMP0188".
Port projects to CastXML instead.
* The "FindCABLE" module has been deprecated via policy "CMP0191".
* The "CMakeDetermineVSServicePack" module has been deprecated via
policy "CMP0196". Port projects to the
"CMAKE_<LANG>_COMPILER_VERSION" variable instead.
Other Changes
=============
* The "ExternalProject" module no longer checks the "URL" archive file
extension. Any archive type that "cmake -E tar" can extract is now
allowed.
* Modules "FindPython3", "FindPython2" and "FindPython" now enforce
consistency of artifacts in cross-compiling mode. This prevents
mixing host and target artifacts. See policy "CMP0190".
* The "GNUInstallDirs" module now prefers to default "SYSCONFDIR",
"LOCALSTATEDIR", and "RUNSTATEDIR" to absolute paths when installing
to special prefixes. See policy "CMP0192".
* The "GNUInstallDirs" module now caches "CMAKE_INSTALL_*" variables
with their leading "usr/" for install prefix "/". See policy
"CMP0193".
* The "install(TARGETS)" command no longer ignores file sets which
haven't been defined at the point it is called. The ordering of
"target_sources(FILE_SET)" and "install(TARGETS)" is no longer
semantically relevant.
* Enabling "ASM" no longer accidentally succeeds using "MSVC"'s "cl" C
compiler as an assembler. See policy "CMP0194".
* The MSVC link "-machine:" flag is no longer added to the
"CMAKE_*_LINKER_FLAGS" variables. See policy "CMP0197".
* The "TARGET_PROPERTY" generator expression now evaluates the
"LINK_LIBRARIES" and "INTERFACE_LINK_LIBRARIES" target properties
transitively. See policy "CMP0189".
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.kde.org/pipermail/kde-devel/attachments/20250626/5e5f8d66/attachment.htm>
More information about the kde-devel
mailing list