Back to Cmake

CMake 4.1 Release Notes

Help/release/4.1.rst

4.3.29.8 KB
Original Source

CMake 4.1 Release Notes


.. only:: html

.. contents::

Changes made since CMake 4.0 include the following.

New Features

File-Based API

  • The :manual:cmake-file-api(7) :ref:v1 <file-api v1> now writes partial replies when buildsystem generation fails with an error. See the :ref:v1 Reply Error Index <file-api reply error index>.

Generators

  • :ref:Makefile Generators and :ref:Ninja Generators gained support for adding a linker launcher with Fortran, CUDA, and HIP. See the :variable:CMAKE_<LANG>_LINKER_LAUNCHER variable and :prop_tgt:<LANG>_LINKER_LAUNCHER target property for details.

Command-Line

  • The :ref:cmake --build <Build Tool Mode> command-line tool, when used with the :generator: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 :manual:cmake-configure-log(7) now reports events from :command:find_package (in CONFIG mode), :command:find_path, :command:find_file, :command:find_library, and :command:find_program commands when first invoked, when their results transition between "not found" and "found", or when enabled explicitly by the :option:--debug-find <cmake --debug-find> command-line option. See :ref:find configure-log event and :ref:find_package configure-log event. Logging may also be controlled by the :variable:CMAKE_FIND_DEBUG_MODE and :variable:CMAKE_FIND_DEBUG_MODE_NO_IMPLICIT_CONFIGURE_LOG variables.

Compilers

  • Diab compilers from Wind River Systems_, versions 5.9.x+, are now supported with :variable:compiler id <CMAKE_<LANG>_COMPILER_ID> Diab for languages ASM, C, and CXX.

.. _Diab compilers from Wind River Systems: https://www.windriver.com/resource/wind-river-diab-compiler-product-overview

  • Renesas Compilers_ are now supported with :variable:compiler id <CMAKE_<LANG>_COMPILER_ID> Renesas for languages ASM and C.

.. _Renesas Compilers: https://www.renesas.com

Commands

  • The :command:add_dependencies command may be called with no dependencies.

  • The :command:cmake_pkg_config command now supports the IMPORT and POPULATE subcommands for interfacing CMake targets with pkg-config based dependencies.

  • The :command:project command now has experimental support for the COMPAT_VERSION keyword, gated by CMAKE_EXPERIMENTAL_EXPORT_PACKAGE_INFO.

Variables

  • The :variable:CMAKE_FIND_REQUIRED variable was added to tell :command:find_package, :command:find_path, :command:find_file, :command:find_library, and :command:find_program to be REQUIRED by default. The commands also gained an OPTIONAL keyword to ignore the variable for a specific call.

  • The :variable:CMAKE_<LANG>_COMPILER_ARCHITECTURE_ID variable is now populated for most compilers, and documented for public use.

  • The :variable:CMAKE_<LANG>_ICSTAT variable and corresponding :prop_tgt:<LANG>_ICSTAT target property were added to tell the :ref:Makefile Generators and the :ref:Ninja Generators to run the IAR icstat tool along with the compiler for C and CXX languages.

Environment Variables

  • The :envvar:CMAKE_<LANG>_IMPLICIT_LINK_LIBRARIES_EXCLUDE environment variable was added to optionally exclude specific libraries from the detected set of :variable:CMAKE_<LANG>_IMPLICIT_LINK_LIBRARIES.

Properties

  • The :prop_tgt:AUTOMOC_INCLUDE_DIRECTORIES target property and associated :variable:CMAKE_AUTOMOC_INCLUDE_DIRECTORIES variable were added to override the automatic discovery of moc includes from a target's transitive include directories.

  • The :prop_sf:MACOSX_PACKAGE_LOCATION source file property now works when set on a source directory, and copies its entire tree into the bundle.

  • The :prop_tgt:PDB_NAME and :prop_tgt:COMPILE_PDB_NAME target properties now support :manual:generator expressions <cmake-generator-expressions(7)>.

Modules

  • The :module:FindASPELL module now provides a version variable, imported targets, and components to optionally select the Aspell library and executable separately.

  • The :module:FindBLAS and :module:FindLAPACK modules now support the NVIDIA Performance Libraries (NVPL).

  • The :module:FindProtobuf module's :command:protobuf_generate(DEPENDENCIES) command argument now accepts multiple values.

  • The :module:FindProtobuf module's :command:protobuf_generate_cpp and :command: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 :command:protobuf_generate command.

Regular Expressions

  • The :command:string(REGEX MATCHALL), :command:string(REGEX REPLACE), and :command:list(TRANSFORM REPLACE) commands now match the regular expression ^ anchor at most once in repeated searches, at the start of the input. See policy :policy:CMP0186.

  • The :command:string(REGEX REPLACE) command now allows references to unmatched groups. They are replaced with empty strings.

  • The :command:string(REGEX MATCH), :command:string(REGEX MATCHALL), and :command:string(REGEX REPLACE) commands now allow zero-length matches.

CTest

  • :manual:ctest(1) gained a :option:--schedule-random-seed <ctest --schedule-random-seed> option to specify a numeric random seed to make :option:ctest --schedule-random deterministic for reproduction.

CPack

  • The :cpack_gen:CPack NuGet Generator gained option :variable:CPACK_NUGET_SYMBOL_PACKAGE to generate NuGet symbol packages containing PDB files.

  • The :cpack_gen:CPack RPM Generator gained :variable:CPACK_RPM_PACKAGE_ENHANCES, :variable:CPACK_RPM_PACKAGE_RECOMMENDS, and :variable:CPACK_RPM_PACKAGE_SUPPLEMENTS variables to specify the corresponding RPM spec fields.

Deprecated and Removed Features

  • The :module: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 :module:FindGCCXML module has been deprecated via policy :policy:CMP0188. Port projects to CastXML instead.

  • The :module:FindCABLE module has been deprecated via policy :policy:CMP0191.

  • The :module:CMakeDetermineVSServicePack module has been deprecated via policy :policy:CMP0196. Port projects to the :variable:CMAKE_<LANG>_COMPILER_VERSION variable instead.

Other Changes

  • The :module:ExternalProject module no longer checks the URL archive file extension. Any archive type that :option:cmake -E tar <cmake-E tar> can extract is now allowed.

  • Modules :module:FindPython3, :module:FindPython2 and :module:FindPython now enforce consistency of artifacts in cross-compiling mode. This prevents mixing host and target artifacts. See policy :policy:CMP0190.

  • The :module:GNUInstallDirs module now prefers to default SYSCONFDIR, LOCALSTATEDIR, and RUNSTATEDIR to absolute paths when installing to special prefixes. See policy :policy:CMP0192.

  • The :module:GNUInstallDirs module now caches CMAKE_INSTALL_* variables with their leading usr/ for install prefix /. See policy :policy:CMP0193.

  • The :command:install(TARGETS) command no longer ignores file sets which haven't been defined at the point it is called. The ordering of :command: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 :policy:CMP0194.

  • The MSVC link -machine: flag is no longer added to the CMAKE_*_LINKER_FLAGS variables. See policy :policy:CMP0197.

  • The :ref:Visual Studio Generators now suppress Visual Studio's default -Zc:forScope, -Zc:inline, and -Zc:wchar_t compiler flags, and -dynamicbase, -errorreport, -nxcompat, and -safeseh link flags, if they are not specified by the project or user. This makes builds more consistent with other generators, and with what projects and users actually specify.

  • The :genex:TARGET_PROPERTY generator expression now evaluates the :prop_tgt:LINK_LIBRARIES and :prop_tgt:INTERFACE_LINK_LIBRARIES target properties transitively. See policy :policy:CMP0189.

Updates

Changes made since CMake 4.1.0 include the following.

4.1.1

  • This version made no changes to documented features or interfaces. Some implementation updates were made to support ecosystem changes and/or fix regressions.

4.1.2

  • The :command:file(GENERATE) command, when evaluating generator expressions, now uses the value of policy :policy:CMP0189 as of each call site. Previously, it used the value as of the end of the directory's CMakeLists.txt, as all other generator expression evaluations do.

4.1.3

  • When building for macOS with the :generator:Xcode generator, :variable:CMAKE_OSX_DEPLOYMENT_TARGET once again defaults to the host's macOS version if it is older than the macOS SDK version, as it did in CMake versions prior to 4.0.

  • The :command:execute_process command once again terminates child processes when its TIMEOUT is reached. This was accidentally regressed by CMake 3.29.

4.1.4, 4.1.5, 4.1.6

  • These versions made no changes to documented features or interfaces. Some implementation updates were made to support ecosystem changes and/or fix regressions.