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 2version
field has been updated to 2.9.The
cmake-file-api(7)
"codemodel" version 2 "target" and "directory" objects gained a newcodemodelVersion
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
, andabstract
fields.The "target" object's
type
field can now also hold the valueUNKNOWN_LIBRARY
.The "codemodel" object's
configurations
entries gained a newabstractTargets
array.Entries in the
directories
andprojects
arrays of the "codemodel" object'sconfigurations
entries gained a newabstractTargetIndexes
array.
The
cmake-file-api(7)
"codemodel" version 2 "target" object gained newlinkLibraries
,interfaceLinkLibraries
,compileDependencies
,interfaceCompileDependencies
,objectDependencies
, andorderDependencies
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 supportscmake -E copy_if_newer
andcmake -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 tocopy_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>})
andunset(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 theimport std
metadata file for the standard library rather than using the compiler to discover its location.The
CMAKE_INTERMEDIATE_DIR_STRATEGY
variable and correspondingCMAKE_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 correspondingCMAKE_AUTOGEN_INTERMEDIATE_DIR_STRATEGY
environment variable were added to change the strategy used to name intermediate directories used forQt Autogen
files.The
CMAKE_SKIP_LINTING
variable and correspondingSKIP_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 toJOB_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 byUNITY_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'scheck_type_size()
command gained a newRESULT_VARIABLE
keyword to customize the result variable name instead of the defaultHAVE_<size-var>
.The
ExternalProject
module'sExternalProject_Add()
andExternalProject_Add_Step()
commands now provide options to set environment variables on the configure, build, install, and test steps.The
FindPython3
,FindPython2
, andFindPython
modules no longer makeNumPy
depend onDevelopment.Module
. See policyCMP0201
.The
GoogleTest
module'sgtest_discover_tests()
command now sets theDEF_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'sswig_add_library()
command gained aDEBUG_POSTFIX
option to control theDEBUG_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 associatedCMAKE_<LANG>_COMPILER_LINKER_ID
andCMAKE_<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
, andTARGET_PDB_FILE_BASE_NAME
generator expressions gained aPOSTFIX
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 aCPACK_NSIS_CRC_CHECK
variable for setting theCRCCheck
attribute.The
CPack WIX Generator
gained aCPACK_WIX_CAB_PER_COMPONENT
variable to enable one.cab
per component.
Deprecated and Removed Features¶
The uppercased
<PACKAGENAME>_FOUND
result variables of find modules are now deprecated in favor of<PackageName>_FOUND
result variables, where appropriate. See documentation of each find module for details.The
FindwxWidgets
module's result variablewxWidgets_USE_FILE
is now deprecated in favor of including theUsewxWidgets
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 no longer matches multiple configurations. See policyCMP0199
.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 aCMakeLists.txt
file. See policyCMP0198
.For builds targeting the MSVC ABI, all generators now add the
_MBCS
preprocessor definition when compiling sources unless_UNICODE
or_SBCS
is found. See policyCMP0204
.For builds targeting the MSVC ABI, all generators now add the
_WINDLL
preprocessor definition when compiling sources in shared libraries. See policyCMP0203
.