| 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 |
| ------------ |
| |
| * These versions made no changes to documented features or interfaces. |
| Some implementation updates were made to support ecosystem changes |
| and/or fix regressions. |