CMake 4.3.0-rc2 is ready for testing

I am proud to announce the second CMake 4.3 release candidate.
https://cmake.org/download/

Documentation is available at:
https://cmake.org/cmake/help/v4.3

Release notes appear below and are also published at
https://cmake.org/cmake/help/v4.3/release/4.3.html

Release milestone is available at:
release milestone

Some of the most significant changes in CMake 4.3 are:

  • Support for importing and exporting packages described using the
    Common Package Specification (CPS) was added.

  • “cmake-instrumentation(7)” was added to enable collection of timing
    data, target information, and system diagnostic information during
    the configure, generate, build, test, and install steps of a CMake
    project

  • “cmake --build” now supports specifying a build directory and preset
    together. The build preset will be used with the explicit build
    directory substituted.

  • The “cmake -E bin2c” command-line tool was added.

  • CMake archive operations gained support for multithreading, compression
    levels, and new compression methods.

  • The “get_property()” and “set_property()” commands now support a
    “FILE_SET” scope for file set properties of a target.

  • The “CMAKE_<LANG>_LINK_FLAGS” and “CMAKE_<LANG>_LINK_FLAGS_<CONFIG>”
    variables were added to support per-language link flags for all
    target types.

  • “$<STRING:…>” generator expressions were added for query,
    generation, and transformation operations on strings.

CMake 4.3 Release Notes


Changes made since CMake 4.2 include the following.

New Features

Common Package Specification

  • Support for importing and exporting packages described using the
    Common Package Specification (CPS) was added. This improves build
    system interoperability by allowing expressive, feature-rich package
    descriptions to be exchanged in a format other than CMake Language.

    • The “find_package()” now searches for and can import CPS packages.

    • The “install()” and “export()” commands gained a new
      “PACKAGE_INFO” sub-command to generate CPS package descriptions.

    • The “project()” command gained new “COMPAT_VERSION” and
      “SPDX_LICENSE” options. These values may be inherited when
      creating a CPS package description. See the
      “install(PACKAGE_INFO)” documentation for details.

Instrumentation

  • “cmake-instrumentation(7)” was added to enable collection of timing
    data, target information, and system diagnostic information during
    the configure, generate, build, test, and install steps of a CMake
    project:

    • Instrumentation data are indexed and provided to callbacks for
      custom processing.

    • Instrumentation data are included in submissions to CDash.

    • Optionally, Google Trace Event Format files may be generated to
      visualize instrumentation data.

Presets

  • “cmake-presets(7)” files now support schema version “11”. The “jobs”
    field under test presets now supports an empty string, to match the
    behavior of “ctest --parallel” with the value omitted.

  • The “jobs” field under both build and test presets no longer accept
    negative integer values, regardless of the schema version.

File-Based API

  • The “cmake-file-api(7)” “codemodel” version 2 version field has been
    updated to 2.10.

  • The “cmake-file-api(7)” “codemodel” version 2 “target” object gained
    a new “interfaceSources” array field, and the “sourceGroups” array
    items gained a new “interfaceSourceIndexes” array field.

Platforms

  • “HIP” language code may now be compiled for SPIR-V targets, e.g.,
    via chipStar. See the “CMAKE_HIP_PLATFORM” variable.

Command-Line

  • “cmake --version” now supports a “=json-v1” value to print detailed
    version information in a JSON format.

  • “cmake --build” now supports specifying a build directory and preset
    together. The build preset will be used with the explicit build
    directory substituted.

  • The “cmake -E” commands “md5sum”, “sha1sum”, “sha224sum”,
    “sha256sum”, “sha384sum”, and “sha512sum” now support reading from
    standard input by passing “-”.

  • The “cmake -E bin2c” command-line tool was added.

  • The “cmake -E tar” command-line tool:

    • Gained a “–cmake-tar-compression-level” flag to specify the
      compression level.

    • Gained a “–cmake-tar-compression-method” flag to specify the
      compression method.

    • Gained a “–cmake-tar-threads” flag to enable multithreaded
      operations.

    • Now supports specifying compression method and level for “7zip”
      and “zip” formats.

    • Gained a “–format=raw” flag to disable compression.

    • Gained a “–lzma” flag to specify “LZMA” compression.

Commands

  • The “cmake_instrumentation()” command was added to make project-
    level instrumentation queries.

  • The “file(ARCHIVE_CREATE)” command:

    • Gained a “THREADS” option to enable multithreaded operations.

    • Now supports “COMPRESSION” method “Deflate” as an alias for
      “GZip”.

    • Now supports “COMPRESSION” method “LZMA”.

    • Now supports “COMPRESSION” method “LZMA2” as an alias for “XZ”.

    • Now supports “COMPRESSION” method “PPMd” for format “7zip”.

    • Now supports “COMPRESSION” and “COMPRESSION_LEVEL” options for
      formats “7zip” and “zip”.

  • The “get_property()” and “set_property()” commands now support a
    “FILE_SET” scope for file set properties of a target.

  • The “string(JSON)” command gained new “GET_RAW” and “STRING_ENCODE”
    modes.

  • The “source_group()” command now supports “generator expressions”.

  • The “cmake_host_system_information()” command gained a
    “LOCALE_CHARSET” query for the expected “cmake-language(7)” script
    encoding.

Variables

  • The “CMAKE_<LANG>_LINK_FLAGS” and “CMAKE_<LANG>_LINK_FLAGS_<CONFIG>”
    variables were added to support per-language link flags for all
    target types. See policy “CMP0210”.

  • The “CMAKE_VERIFY_PRIVATE_HEADER_SETS” variable and corresponding
    “VERIFY_PRIVATE_HEADER_SETS” target property were added to enable
    build rules that verify all headers in private file sets can be used
    on their own.

Properties

  • A “<LANG>_PVS_STUDIO” target property and supporting
    “CMAKE_<LANG>_PVS_STUDIO” variable were introduced to tell Makefile
    Generators and Ninja Generators to run “pvs-studio-analyzer” with
    the compiler for “C” and “CXX” languages.

  • When “VERIFY_INTERFACE_HEADER_SETS” is set to true on an executable
    target, that target’s interface file sets are verified regardless of
    its “ENABLE_EXPORTS” property. See policy “CMP0209”.

  • The “PRIVATE_HEADER_SETS_TO_VERIFY” target property was added to
    customize which private file sets to verify when the target’s
    “VERIFY_PRIVATE_HEADER_SETS” property is true.

Modules

  • The “FindCUDAToolkit” module now creates a “CUDA::bin2c” imported
    target for the bin2c utility.

  • The “FindLibXml2” module gained a “LibXml2_USE_STATIC_LIBS” hint to
    select static libraries.

  • The “FindRuby” module now provides imported targets.

  • The “FindSQLite3” module now provides imported targets with the
    “SQLite3::” prefix.

  • The “UseJava” module’s “add_jar()” command now accepts a new
    “INCLUDE_MODULES” option that adds its arguments to the “–module-
    path” argument to the Java compiler. This allows building JAR files
    that use JPMS modules in their build.

Generator Expressions

  • String Comparison generator expressions were added.

  • “$<STRING:…>” generator expressions were added for query,
    generation, and transformation operations on strings.

  • The “$<FILE_SET_EXISTS>” and “$<FILE_SET_PROPERTY>” generator
    expressions were added to query file set existence and properties.

  • The “$<SOURCE_EXISTS>” and “$<SOURCE_PROPERTY>” generator
    expressions were added to query source file existence and
    properties.

CTest

  • The “CTestCoverageCollectGCOV” module:

    • Now supports “TARBALL_COMPRESSION” method “LZMA”.

    • Now supports “TARBALL_COMPRESSION” method “LZMA2” as an alias for
      “XZ”.

    • Now supports “FROM_EXT” with file extensions corresponding to
      “LZMA” and “ZSTD” compression.

CPack

  • “CPack” gained the “CPACK_COMPRESSION_LEVEL” variable to control the
    compression level used when creating packages.

  • The “CPack Archive Generator”:

    • Now supports compression method specification for formats “7zip”
      and “zip”.

    • Gained a “CPACK_ARCHIVE_COMPRESSION_LEVEL” option to control the
      compression level used when creating archive packages.

    • Gained “CPACK_ARCHIVE_UID” and “CPACK_ARCHIVE_GID” options to
      specify the UID and GID of archive entries, respectively. The
      defaults are UID “0” and GID “0”. See policy “CMP0206”.

  • The “CPack DEB Generator” gained a new
    “CPACK_DEBIAN_COMPRESSION_LEVEL” variable to control the compression
    level used when creating Debian packages.

  • The “CPack WIX Generator” now supports per-user installers by
    setting “CPACK_WIX_INSTALL_SCOPE” to “perUser”.

Deprecated and Removed Features

  • The “CMAKE_ENABLE_EXPORTS” variable is deprecated in favor of the
    “CMAKE_EXECUTABLE_ENABLE_EXPORTS” and
    “CMAKE_SHARED_LIBRARY_ENABLE_EXPORTS” variables.

  • The “export(EXPORT)” command no longer allows certain arguments to
    be missing or empty. See policy “CMP0208”.

Other Changes

  • The “cmake -E tar” command-line tool and the “file(ARCHIVE_EXTRACT)”
    command now reject archive entries whose paths are absolute or
    contain “..” path traversal components.

  • The family of “cmake --trace” and related commands now print “end”
    commands for control structures: “endblock()”, “endforeach()”,
    “endfunction()”, “endif()”, “endmacro()”, and “endwhile()”.

  • The “file(CREATE_LINK)” command’s “COPY_ON_ERROR” option, when used
    with a directory, now copies directory content. See policy
    “CMP0205”.

  • The “file(GET_RUNTIME_DEPENDENCIES)” and
    “install(RUNTIME_DEPENDENCY_SET)” commands now normalize paths
    before matching filters. See policy “CMP0207”.

  • The precompiled Linux “aarch64” binaries provided on cmake.org now
    require GLIBC 2.28 or higher.

  • The precompiled macOS binary provided on “cmake.org” for macOS
    10.13+ now requires macOS 12 or newer for the “cmake-gui(1)”
    application. The command-line tools still run on macOS 10.13.

  • The precompiled Windows binaries provided on cmake.org now require
    Windows 10 or higher.


Changes made since CMake 4.3.0-rc1:

Alex Turbov (1):

  • pre-commit: version bump typos hook + fix found typo

Ben Boeckel (3):

  • Modules/*Compiler: reword errors about invalid variable settings
  • cmExportInstallFileGenerator: fix error message construction
  • c++modules: Revert partial implementation of per-importer BMIs for 4.3

Brad King (11):

  • FindVulkan: Use ENV{VULKAN_SDK} only if it exists
  • FindVulkan: Do not search bin directories for libraries
  • FindVulkan: Drop support for 32-bit SDK on Windows
  • FindVulkan: Add support for cross-compiling between Windows x64/ARM64
  • Tests/RunCMake/ParseImplicitData: Fix Windows+CUDA sample naming convention
  • cmNinjaTargetGenerator: Factor out helper for shell path arguments
  • c++modules: Fix scanning with spaces in subdirectory name
  • Experimental: Restore documentation link to CPS
  • Experimental: Restore import std gate
  • ci: Enable import std tests in Fedora GCC jobs
  • CMake 4.3.0-rc2

Eduard Voronkin (1):

  • FASTBuild: fix iface targets with private sources

Kyle Edwards (1):

  • Help: Clarify that bin2c placeholders are like configure_file()

Marc Chevrier (2):

  • FindPython: enhance ARCHITECTURE detection
  • FindPython: Ensure sysconfig paths are in CMake format

Martin Duffy (1):

  • instrumentation: Test shell redirection in instrumented custom commands

Matthew Woehlke (4):

  • CPS: Fix C features
  • Help: Update CPS release notes for 4.3
  • CPS: Fix crash on bad paths in .cps file
  • Help: Tweak CMAKE_INSTALL_EXPORTS_AS_PACKAGE_INFO

Michael Ferrari (1):

  • c++modules: Fix clang *.modules.json path on Windows

Nuno Nobre (1):

  • Help: Clarify what policies a “policy version” sets to NEW

Peter Kokot (1):

  • Help: Fix install(SBOM) argument typo

Tyler Yankee (3):

  • Help: Add 4.3 version tags for string JSON operations
  • Help: Update presets release notes for 4.3
  • presets: Correct version-agnostic negative jobs