# CMake 4.2.0-rc2 is ready for testing

**URL:** https://discourse.cmake.org/t/cmake-4-2-0-rc2-is-ready-for-testing/15279
**Category:** Announcements
**Created:** [October 31, 2025, 2:54pm UTC](https://discourse.cmake.org/t/cmake-4-2-0-rc2-is-ready-for-testing/15279 "2025-10-31T14:54:01Z")
**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: [October 31, 2025, 2:54pm UTC](https://discourse.cmake.org/t/cmake-4-2-0-rc2-is-ready-for-testing/15279/1 "2025-10-31T14:54:02Z")

</div>

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

Documentation is available at:  
[https://cmake.org/cmake/help/v4.2](https://cmake.org/cmake/help/v4.2)

Release notes appear below and are also published at  
[https://cmake.org/cmake/help/v4.2/release/4.2.html](https://cmake.org/cmake/help/v4.2/release/4.2.html)

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

Some of the most significant changes in CMake 4.2 are:

- The “Visual Studio 18 2026” generator was added. This is  
experimental and based on “Visual Studio 2026 Insiders” because this  
version of VS has not been released.

- The “FASTBuild” generator was added.

- CMake now supports Cross Compiling for Emscripten with simple  
toolchain files.

- The “set(CACHE{\<variable\>})” and “unset(CACHE{\<variable\>})” commands  
were added to explicitly set and unset cache entries.

- The “INSTALL\_OBJECT\_NAME” source file property was added to control  
names of installed object files for specific compiled sources.

- Nearly all find modules now provide a “\<PackageName\>\_VERSION” result  
variable matching the casing of its module name. Existing variants  
such as “\<PackageName\>\_VERSION\_STRING” and uppercased  
“\<PACKAGENAME\>\_VERSION” are deprecated. See documentation of each  
find module for details.

- The “ExternalProject” module’s “ExternalProject\_Add()” and  
“ExternalProject\_Add\_Step()” commands now provide options to set  
environment variables on the configure, build, install, and test  
steps.

- The “Visual Studio 14 2015” generator is now deprecated and will be  
removed in a future version of CMake.

CMake 4.2 Release Notes

* * *

Changes made since CMake 4.1 include the following.

# New Features

## File-Based API

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

- The “cmake-file-api(7)” “codemodel” version 2 “target” and  
“directory” objects gained a new “codemodelVersion” field.

- The “cmake-file-api(7)” “codemodel” version 2 now includes imported  
targets and all interface library targets in its replies.  
Previously, imported targets were omitted, and only those interface  
targets that participated in the build system were included. The  
following changes support these new additions:

- The “cmake-file-api(7)” “codemodel” version 2 “target” object gained  
new “linkLibraries”, “interfaceLinkLibraries”,  
“compileDependencies”, “interfaceCompileDependencies”,  
“objectDependencies”, and “orderDependencies” fields.

## Generators

- The “Visual Studio 18 2026” generator was added. This is  
experimental and based on “Visual Studio 2026 Insiders” because this  
version of VS has not been released.

- The “FASTBuild” generator was added.

## Platforms

- CMake now supports Cross Compiling for Emscripten with simple  
toolchain files.

## Command-Line

- The “cmake(1)” command-line tool now supports “cmake -E  
copy\_if\_newer” and “cmake -E copy\_directory\_if\_newer” subcommands to  
copy files based on timestamp comparison instead of content  
comparison. These commands copy files only if the source is newer  
than the destination, providing better performance for build systems  
compared to “copy\_if\_different” which compares file contents.

## Commands

- The “cmake\_language(TRACE)” command was added to enable or disable  
tracing during script execution.

- The “set(CACHE{\<variable\>})” and “unset(CACHE{\<variable\>})” commands  
were added to explicitly set and unset cache entries.

- The “string(REGEX QUOTE)” command was added to generate a regular  
expression exactly matching a string.

## Variables

- The “CMAKE\_CXX\_STDLIB\_MODULES\_JSON” variable was added to set the  
path to the “import std” metadata file for the standard library  
rather than using the compiler to discover its location.

- The “CMAKE\_INTERMEDIATE\_DIR\_STRATEGY” variable and corresponding  
“CMAKE\_INTERMEDIATE\_DIR\_STRATEGY” environment variable were added to  
change the strategy used to name intermediate directories used for  
object files and other associated target metadata.

- The “CMAKE\_AUTOGEN\_INTERMEDIATE\_DIR\_STRATEGY” variable and  
corresponding “CMAKE\_AUTOGEN\_INTERMEDIATE\_DIR\_STRATEGY” environment  
variable were added to change the strategy used to name intermediate  
directories used for “Qt Autogen” files.

- The “CMAKE\_SKIP\_LINTING” variable and corresponding “SKIP\_LINTING”  
target property were added to tell the Command-Line Build Tool  
Generators to skip linting all sources in a target.

## Properties

- The “INSTALL\_OBJECT\_NAME” source file property was added to control  
names of installed object files for specific compiled sources.

- The “INSTALL\_OBJECT\_NAME\_STRATEGY” target property was added to  
control the naming strategy for installed object files.

- The “INSTALL\_OBJECT\_ONLY\_USE\_DESTINATION” target property was added  
to more precisely control the installation path for object files.

- The “JOB\_POOL\_COMPILE” source file property was added to assign  
individual source compilations to “JOB\_POOLS”.

- The “OBJECT\_NAME” source file property was added to control object  
names of compiled source files.

- The “UNITY\_BUILD\_FILENAME\_PREFIX” target property was added to  
control names of source files generated by “UNITY\_BUILD”.

## Modules

- Nearly all find modules now provide a “\<PackageName\>\_VERSION” result  
variable matching the casing of its module name. Existing variants  
such as “\<PackageName\>\_VERSION\_STRING” and uppercased  
“\<PACKAGENAME\>\_VERSION” are deprecated. See documentation of each  
find module for details.

- The “CheckTypeSize” module’s “check\_type\_size()” command gained a  
new “RESULT\_VARIABLE” keyword to customize the result variable name  
instead of the default “HAVE\_\<size-var\>”.

- The “ExternalProject” module’s “ExternalProject\_Add()” and  
“ExternalProject\_Add\_Step()” commands now provide options to set  
environment variables on the configure, build, install, and test  
steps.

- The “FindPython3”, “FindPython2”, and “FindPython” modules no longer  
make “NumPy” depend on “Development.Module”. See policy “CMP0201”.

- The “GoogleTest” module’s “gtest\_discover\_tests()” command now sets  
the “DEF\_SOURCE\_LINE” test property for each discovered test if  
gtest supports the “–gtest\_output=json” option. This test property  
is used by some IDEs to locate the source for each test.

- The “UseSWIG” module’s “swig\_add\_library()” command gained a  
“DEBUG\_POSTFIX” option to control the “DEBUG\_POSTFIX” target  
property.

## Generator Expressions

- The “\<LANG\>\_COMPILER\_LINKER\_ID” and  
“\<LANG\>_COMPILER\_LINKER\_FRONTEND\_VARIANT" families of generator  
expressions were added to access the value of the associated  
"CMAKE_\<LANG\>_COMPILER\_LINKER\_ID" and  
"CMAKE_\<LANG\>\_COMPILER\_LINKER\_FRONTEND\_VARIANT” variables.

- The “TARGET\_FILE\_BASE\_NAME”, “TARGET\_IMPORT\_FILE\_BASE\_NAME”,  
“TARGET\_LINKER\_FILE\_BASE\_NAME”,  
“TARGET\_LINKER\_LIBRARY\_FILE\_BASE\_NAME”,  
“TARGET\_LINKER\_IMPORT\_FILE\_BASE\_NAME”, and  
“TARGET\_PDB\_FILE\_BASE\_NAME” generator expressions gained a “POSTFIX”  
option to control the inclusion of the “\<CONFIG\>\_POSTFIX” target  
property as part of the base names of the corresponding files.

- The “TARGET\_INTERMEDIATE\_DIR” generator expression was added to  
refer to a target’s intermediate files directory in the build tree.

## CPack

- The “CPACK\_PACKAGE\_CHECKSUM” variable now supports multiple values.

- The “CPack NSIS Generator” gained a “CPACK\_NSIS\_CRC\_CHECK” variable  
for setting the “CRCCheck” attribute.

- The “CPack WIX Generator” gained a “CPACK\_WIX\_CAB\_PER\_COMPONENT”  
variable to enable one “.cab” per component.

# Deprecated and Removed Features

- All find modules now provide a “\<PackageName\>\_FOUND” result variable  
matching the casing of its module name. Existing variants, such as  
the uppercased “\<PACKAGENAME\>\_FOUND”, are deprecated where  
appropriate. See documentation of each find module for details.

- The “FindwxWidgets” module’s result variable “wxWidgets\_USE\_FILE” is  
now deprecated in favor of including the “UsewxWidgets” module  
directly.

- The “Visual Studio 14 2015” generator is now deprecated and will be  
removed in a future version of CMake.

# Other Changes

- The “$\<CONFIG:cfgs\>” generator expression, when appearing on an  
imported target, has been fixed to only match the configuration  
actually being consumed. See policy “CMP0199”.

- Selection of configuration and location of imported targets is now  
more consistent. See policy “CMP0200”.

- The “CMAKE\_PARENT\_LIST\_FILE” variable is no longer defined when  
processing a “CMakeLists.txt” file. See policy “CMP0198”.

- For builds targeting the MSVC ABI, all generators now add the  
“\_MBCS” preprocessor definition when compiling sources unless  
“\_UNICODE” or “\_SBCS” is found. See policy “CMP0204”.

- For builds targeting the MSVC ABI, all generators now add the  
“\_WINDLL” preprocessor definition when compiling sources in shared  
libraries. See policy “CMP0203”.

* * *

Changes made since CMake 4.2.0-rc1:

AJIOB (4):

- Tests/RunCMake: Match xxx.cmake file name more precisely
- Tests/RunCMake: Match CMakeLists.txt file name more precisely
- Tests/RunCMake: fix version typo
- Tests/RunCMake: Match dots more precisely, part 3

Andrej730 (3):

- UseSWIG: Issue `swig_link_libraries` deprecation warning if CMP0078 is NEW
- Tests: Fix RunCMake.UseSWIG SetPOSTFIX case on Windows
- FindPython: Support getting DEBUG\_POSTFIX without requiring Interpreter

Ben Boeckel (4):

- PrecompileHeaders: downgrade `REUSE_FROM` without a PCH to a warning
- Help/OPTIMIZE\_DEPENDENCIES: fix parity of which files are considered
- HELP/OPTIMIZE\_DEPENDENCIES: fix reST markup
- VS: do not create `ProgramDataBaseFileName` entries without a filepath

Brad King (18):

- Compilers: Use -print-sysroot output only with successful exit code
- Tests: Remove outdated CMake.PolicyCheck test
- Help: Clarify 4.2 release note on `$\<CONFIG\>` policy CMP0199
- ci: add unzip to cuda13.0 base image
- macOS: Remove outdated condition for CMAKE\_OSX\_DEPLOYMENT\_TARGET
- macOS: Avoid relying on sw\_vers when cross-compiling from another OS
- VS: Fix SLNX generation so CSharp projects build in the IDE
- Tests/FindBoost/TestPython: Improve python version list formatting
- ci: Add job for CUDA with FASTBuild generator on Linux
- ci: Add script to repackage macOS SDKs
- ci: Add script to install macOS SDK version 15.5
- ci: Revert packaging to macOS 15.5 SDK to restore cmake-gui rendering
- Apple: Initialize deployment target after SDK
- Xcode: Restore default CMAKE\_OSX\_DEPLOYMENT\_TARGET to run on host
- Tutorial: Restore source archive when published on [cmake.org](http://cmake.org)
- VS: Restore support for Intel Fortran projects
- macOS: Do not incorrectly search for per-arch SDKs
- CMake 4.2.0-rc2

Craig Scott (1):

- GoogleTest: Avoid POST\_BUILD race condition for gtest\_discover\_tests()

Eduard Voronkin (6):

- FASTbuild: allow setting custom IDE args
- FASTBuild: Explicitly disallow CUDA language since it is not implemented
- FASTBuild: optimize try\_compile builds
- FASTBuild: support CUDA language
- FASTBuild: Disable caching and distribution in try\_compile builds
- FASTBuild: generate compile\_commands

Karolina Surma (1):

- FindPython: Add support for Python 3.15

Marc Chevrier (1):

- Makefiles: Position target-wide link flags consistently with other generators

Martin Duffy (3):

- install(PACKAGE\_INFO): Fix error when usage requirements contain certain genex
- instrumentation: Only quote arguments that contain a space
- instrumentation: Add showOnly to ctest snippets

Matthew Woehlke (5):

- Help: Add missing gate for project(SPDX\_LICENSE)
- find\_package: Respect CPS license
- Help: Improve documentation of project SPDX\_LICENSE
- cmPackageInfoArguments: Improve error message
- CPS: Improve invalid namespace error

Ottmar Zittlau (1):

- GoogleTest: Restore support for empty discovered test list

Tristan Daifuku (1):

- Linker: Tolerate CMAKE\_EXECUTE\_PROCESS\_COMMAND\_ERROR\_IS\_FATAL set to ANY

Tyler Yankee (3):

- Tests/Instrumentation: Remove unused files
- Help/instrumentation: Fix link to CMake Content File
- instrumentation: Fix snippet `result` field

Vito Gamberini (2):

- Tutorial: Update IPO example in Step 6
- Tutorial: Add Step 0 to prepare the working environment
