# CMake 4.2.0-rc4 is ready for testing

**URL:** https://discourse.cmake.org/t/cmake-4-2-0-rc4-is-ready-for-testing/15318
**Category:** Announcements
**Created:** [November 17, 2025, 11:34pm UTC](https://discourse.cmake.org/t/cmake-4-2-0-rc4-is-ready-for-testing/15318 "2025-11-17T23:34:17Z")
**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: [November 17, 2025, 11:34pm UTC](https://discourse.cmake.org/t/cmake-4-2-0-rc4-is-ready-for-testing/15318/1 "2025-11-17T23:34:17Z")

</div>

I am proud to announce the fourth 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.

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

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

Brad King (19):

- Tests: Update expected Zstandard magic number for libarchive 3.8.2
- execute\_process: Restore termination of processes on timeout
- cmDocumentationFormatter: Implement PrintFormatted privately
- Tests/FindJNI/Minimal: Fix test for Java 24 and above
- FindJNI: Add Debian/Ubuntu specific paths for more recent JDK versions
- FindImageMagick: Fix detection of version 7 from headers
- FindPostgreSQL: Add support for version 17
- ci: Update debian12-ninja job to use Swift 6.2.1
- ci: Update to TIClang 4.0.4
- ci: Update base images to Debian 13
- ci: use Debian 13 images and environments
- IWYU: Update for Debian 13 CI job
- VS: Add CUDA flag table entry for nvcc --keep flag
- Help: Update 4.2 release note for Visual Studio 18.0 release
- autogen: Remove unnecessary nullptr check
- VS: Fix SLNX with multiple solution-to-project configuration mappings
- VS: Add SLNX default startup project
- ci: update macOS jobs to use Xcode 26.1
- CMake 4.2.0-rc4

Craig Scott (1):

- Help: Fix typos and formatting for 4.2 release

Eduard Voronkin (3):

- FASTBuild: rename test target to RUN\_TESTS
- FASTBuild: remove non-existent autogen byproducts
- FASTBuild: fix multi-language PCHs
