[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