CMake 3.29 Release Notes ************************ .. only:: html .. contents:: Changes made since CMake 3.28 include the following. New Features ============ Command-Line ------------ * :manual:`cmake(1)` :option:`-E cat ` can now print the standard input by passing the ``-`` argument. Generators ---------- * :ref:`Visual Studio Generators` now support selecting between the Intel oneAPI Fortran compiler (``ifx``) and the Intel classic Fortran compiler (``ifort``) using a ``fortran=`` field in :variable:`CMAKE_GENERATOR_TOOLSET`. File-Based API -------------- * The :manual:`cmake-file-api(7)` "codemodel" version 2 ``version`` field has been updated to 2.7. * The :manual:`cmake-file-api(7)` "codemodel" version 2 "target" object gained a new "launchers" field. Compilers --------- * The LLVM/Clang GNU-like frontend on Windows (``clang++``) may now be used to compile ``CUDA`` language sources. * Compilers targeting the GNU ABI on Windows (MinGW) may now be used to compile Objective C (``OBJC``) and Objective C++ (``OBJCXX``). These include GNU compilers (``gcc`` and ``g++``) and the LLVM/Clang GNU-like frontends (``clang`` and ``clang++``). * TI Clang-based compilers are now supported with :variable:`compiler id _COMPILER_ID>` ``TIClang``. Commands -------- * The :ref:`add_custom_command(TARGET) ` signature now supports adding build events through :ref:`Alias Targets`. * The :command:`cmake_language(EXIT)` sub-command was added to terminate :option:`cmake -P` scripts with a specified exit code. * The :command:`export(SETUP)` sub-command was added to configure export sets. Its ``TARGET`` option's ``XCFRAMEWORK_LOCATION`` setting specifies the location of a ``.xcframework`` that can be substituted for an installed target. * The :command:`if` command gained new tests ``IS_READABLE``, ``IS_WRITABLE`` and ``IS_EXECUTABLE`` to check file or directory permissions. Variables --------- * The :envvar:`CMAKE_INSTALL_PREFIX` environment variable was added to provide a default value for the :variable:`CMAKE_INSTALL_PREFIX` variable. * The :variable:`CMAKE_LINKER_TYPE` variable and corresponding :prop_tgt:`LINKER_TYPE` target property were added to specify what linker to use with some toolchains. * The :variable:`CMAKE__COMPILER_LINKER`, :variable:`CMAKE__COMPILER_LINKER_ID`, :variable:`CMAKE__COMPILER_LINKER_VERSION` and :variable:`CMAKE__COMPILER_LINKER_FRONTEND_VARIANT` variables were added to describe the linker used by the language's link step. * The :variable:`CMAKE_PROJECT_INCLUDE`, :variable:`CMAKE_PROJECT_INCLUDE_BEFORE`, :variable:`CMAKE_PROJECT__INCLUDE`, and :variable:`CMAKE_PROJECT__INCLUDE_BEFORE` variables learned to support a :ref:`semicolon-separated list ` of CMake language files to be included sequentially. These variables can also reference module names to be found in :variable:`CMAKE_MODULE_PATH` or builtin to CMake. * The :variable:`CMAKE_SKIP_TEST_ALL_DEPENDENCY` variable was added to control whether the ``test`` (or ``RUN_TESTS``) buildsystem target depends on the ``all`` (or ``ALL_BUILD``) target. * A :variable:`CMAKE_TEST_LAUNCHER` variable and corresponding :prop_tgt:`TEST_LAUNCHER` target property were added to specify a launcher to be used by executable targets when invoked by tests added by the :command:`add_test` command. Properties ---------- * The :prop_tgt:`CROSSCOMPILING_EMULATOR` target property now supports :manual:`generator expressions `. * The :prop_tgt:`UNITY_BUILD` target property now supports the Objective C (``OBJC``) and Objective C++ (``OBJCXX``) languages. * The :prop_tgt:`XCODE_EMBED_XPC_SERVICES >` target property was added to tell the :generator:`Xcode` generator what targets to put in the ``Embed XPC Resources`` build phase. Modules ------- * The :module:`CMakePackageConfigHelpers` module gained new :command:`generate_apple_platform_selection_file` and :command:`generate_apple_architecture_selection_file` functions, which can be used to generate a file that includes another Apple-platform-specific file or the includes an architecture-specific implementation of a package for an Apple platform, respectively. * The :module:`FindOpenGL` module learned to find a GLU include directory different than the GL include directory. A new ``OPENGL_INCLUDE_DIRS`` result variable provides all include directories. CTest ----- * :manual:`ctest(1)` gained a :option:`--http-header ` option to add custom headers on submission to CDash. * :manual:`ctest(1)` gained the :option:`--tests-from-file ` and :option:`--exclude-from-file ` options to run or exclude tests named in a file. * :manual:`ctest(1)` now supports :ref:`job server integration ` on POSIX systems. * The :option:`ctest -j` option may now be given without a value to let ctest choose a default level of parallelism, or with ``0`` to let ctest use unbounded parallelism. The corresponding :envvar:`CTEST_PARALLEL_LEVEL` environment variable, if set to the empty string, is now equivalent to passing ``-j`` with no value. * The :command:`ctest_test` command gained options ``INCLUDE_FROM_FILE`` and ``EXCLUDE_FROM_FILE`` to run or exclude tests named in a file. CPack ----- * The :cpack_gen:`CPack DEB Generator` :variable:`CPACK_DEBIAN_FILE_NAME` variable may now be set without any suffix, and the ``.deb`` suffix will be added automatically. * The :cpack_gen:`CPack RPM Generator` :variable:`CPACK_RPM_FILE_NAME` variable may now be set without any suffix, and the ``.rpm`` suffix will be added automatically. * The :cpack_gen:`CPack WIX Generator` gained a new variable, :variable:`CPACK_WIX_INSTALL_SCOPE`, to control the ``InstallScope`` property of WiX MSI installers. Other Changes ============= * CMake learned to de-duplicate libraries on link lines based on linker capabilities. See policy :policy:`CMP0156`. * The :command:`add_test` command now honors :variable:`CMAKE_CROSSCOMPILING_EMULATOR` only when cross-compiling. See policy :policy:`CMP0158`. * On Windows, when targeting the MSVC ABI, the :command:`find_library` command now accepts ``.a`` file names after first considering ``.lib``. This is symmetric with existing behavior when targeting the GNU ABI, in which the command accepts ``.lib`` file names after first considering ``.a``. * On Windows, when targeting the MSVC ABI, the :command:`find_library` command now considers ``.dll.lib`` file names before ``.lib``. This is the default suffix for DLL import libraries created by Rust toolchains for the MSVC ABI. * The :generator:`Ninja` and :generator:`NMake Makefiles` generators now use the ``-external:I`` flag for system includes when using IntelLLVM as of version 2021.4. The ``-external:W0`` flag is also used as of version 2022.2. * The :command:`create_test_sourcelist` command now provides a full path to the generated driver source file. * The :variable:`CPACK_PRODUCTBUILD_DOMAINS` variable now defaults to true. See policy :policy:`CMP0161`. * The :cpack_gen:`CPack WIX Generator` now produces WiX MSI installers that create start menu and uninstall entries for all users by default, as documented by the :variable:`CPACK_WIX_INSTALL_SCOPE` variable ``perMachine`` value. Previously, without a custom WiX template, it produced installers that would only create start menu and uninstall entries for the current user, even though they install for all users. Updates ======= Changes made since CMake 3.29.0 include the following. 3.29.1 ------ * The :variable:`CMAKE_LINKER_TYPE` variable and corresponding :prop_tgt:`LINKER_TYPE` target property now work with compilers for the ``Swift`` language. 3.29.2 ------ * This version made no changes to documented features or interfaces. Some implementation updates were made to support ecosystem changes and/or fix regressions.