# CMake 4.3.0-rc2 is ready for testing

**URL:** https://discourse.cmake.org/t/cmake-4-3-0-rc2-is-ready-for-testing/15538
**Category:** Announcements
**Created:** [March 4, 2026, 12:14am UTC](https://discourse.cmake.org/t/cmake-4-3-0-rc2-is-ready-for-testing/15538 "2026-03-04T00:14:14Z")
**Posts on this page:** 1
**Page:** 1

<div class="post-metadata">

### Author: ![johnwparent](https://discourse.cmake.org/user_avatar/discourse.cmake.org/johnwparent/32/2179_2.png) [@johnwparent](https://discourse.cmake.org/u/johnwparent)
#### Post date: [March 4, 2026, 12:14am UTC](https://discourse.cmake.org/t/cmake-4-3-0-rc2-is-ready-for-testing/15538/1 "2026-03-04T00:14:14Z")

</div>

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

Documentation is available at:  
[https://cmake.org/cmake/help/v4.3](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](https://cmake.org/cmake/help/v4.3/release/4.3.html)

Release milestone is available at:  
[release milestone](https://gitlab.kitware.com/cmake/cmake/-/milestones/185)

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.

## 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:

## 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:

## Commands

- The “cmake\_instrumentation()” command was added to make project-  
level instrumentation queries.

- The “file(ARCHIVE\_CREATE)” command:

- 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:

## CPack

- “CPack” gained the “CPACK\_COMPRESSION\_LEVEL” variable to control the  
compression level used when creating packages.

- The “CPack Archive Generator”:

- 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](http://cmake.org) now  
require GLIBC 2.28 or higher.

- The precompiled macOS binary provided on “[cmake.org](http://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](http://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
