CMake 4.2.0-rc4 is ready for testing
I am proud to announce the fourth CMake 4.2 release candidate.
https://cmake.org/download/
Documentation is available at:
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
Release milestone is available at:
release milestone
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 "target" object gained "imported", "local", and "abstract"
fields.
* The "target" object's "type" field can now also hold the value
"UNKNOWN_LIBRARY".
* The "codemodel" object's "configurations" entries gained a new
"abstractTargets" array.
* Entries in the "directories" and "projects" arrays of the
"codemodel" object's "configurations" entries gained a new
"abstractTargetIndexes" array.
* 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