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