CMake 3.26.0-rc5 is ready for testing

I am proud to announce the fourth CMake 3.26 release candidate.
https://cmake.org/download/

Documentation is available at:
https://cmake.org/cmake/help/v3.26

Release notes appear below and are also published at
https://cmake.org/cmake/help/v3.26/release/3.26.html

Some of the more significant changes in CMake 3.26 are:

  • The “ASM_MARMASM” language was added to support the Microsoft ARM
    assembler language.

  • CMake now writes a YAML log of configure-time checks to
    “CMakeFiles/CMakeConfigureLog.yaml” under the top of the build tree.
    See the “cmake-configure-log(7)” manual.

  • The “cmake-file-api(7)” “codemodel” version 2 “target” object gained
    a new “fileSets” field and associated “fileSetIndex” field to
    “sources” objects.

  • The “$<BUILD_LOCAL_INTERFACE:…>” generator expression was added to
    prevent usage requirements from being exported to dependent
    projects.

  • Language Standard Flags, such as “-std=c++11”, when generated due to
    “target_compile_features()” or “CMAKE_<LANG>_STANDARD”, are now
    placed before flags added by “target_compile_options()”, rather than
    after them.

  • The top-level “project()” call will now emit an author warning if
    the documented command order in relation to
    “cmake_minimum_required()” is not respected.

CMake 3.26 Release Notes


Changes made since CMake 3.25 include the following.

New Features

Languages

  • The “ASM_MARMASM” language was added to support the Microsoft ARM
    assembler language.

Command-Line

  • The “cmake -E copy” command-line tool now supports a “-t” argument.

  • The “cmake -E copy_directory_if_different” command-line tool was
    added.

Configure Log

  • CMake now writes a YAML log of configure-time checks to
    “CMakeFiles/CMakeConfigureLog.yaml” under the top of the build tree.
    See the “cmake-configure-log(7)” manual.

File-Based API

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

  • The “cmake-file-api(7)” “codemodel” version 2 “target” object gained
    a new “fileSets” field and associated “fileSetIndex” field to
    “sources” objects.

  • The “cmake-file-api(7)” gained a new “configureLog” object kind that
    enables stable access to the “cmake-configure-log(7)”.

Commands

  • The “add_custom_command()” and “add_custom_target()” commands now
    support “generator expressions” in their “COMMENT” option.

  • The “message()” command gained a “CONFIGURE_LOG” mode to record an
    entry in the “cmake-configure-log(7)”.

  • The “string(TIMESTAMP)” and “file(TIMESTAMP)” commands now support
    the “%z” and “%Z” specifiers for the time zone.

  • The “try_compile()” and “try_run()” commands gained a
    “LOG_DESCRIPTION” option specifying text to be recorded in the
    “cmake-configure-log(7)”.

  • The “try_compile()” and “try_run()” commands gained a “NO_LOG”
    option to skip recording a “cmake-configure-log(7)” entry.

Variables

  • The “CMAKE_<LANG>_COMPILER_FRONTEND_VARIANT” variable is now set for
    “GNU”, “MSVC”, and “AppleClang” compilers that have only one
    frontend variant.

  • A “CMAKE_VS_VERSION_BUILD_NUMBER” variable is now set by Visual
    Studio Generators for VS 2017 and above to report the four-component
    Visual Studio version number.

Properties

  • The “<LANG>_CLANG_TIDY_EXPORT_FIXES_DIR” target property was added
    to allow the “clang-tidy” tool to export its suggested fixes to a
    set of “.yaml” files. A new
    “CMAKE_<LANG>_CLANG_TIDY_EXPORT_FIXES_DIR” variable was created to
    initialize this property.

  • The “XCODE_EMBED_EXTENSIONKIT_EXTENSIONS” target property was added
    to tell the “Xcode” generator to embed ExtensionKit-based extensions
    such as extensions using the Background Assets framework. Aspects
    of the embedding can be customized with:

    • “XCODE_EMBED_EXTENSIONKIT_EXTENSIONS_PATH”

    • “XCODE_EMBED_EXTENSIONKIT_EXTENSIONS_CODE_SIGN_ON_COPY”

    • “XCODE_EMBED_EXTENSIONKIT_EXTENSIONS_REMOVE_HEADERS_ON_COPY”

Modules

  • The “ExternalProject” module’s “ExternalProject_Add()” command
    gained an “INSTALL_BYPRODUCTS” option to specify files generated by
    the “install” step.

  • The “FindCUDAToolkit” module:

    • gained support for the “sbsa-linux” cross compilation target, and

    • now provides an imported target for “nvrtc_static”, if found.

  • The “FindImageMagick” module now provides imported targets.

  • The “FindPython3” and “FindPython” modules gained support for the
    Stable Application Binary Interface.

  • The “UseSWIG” module gained support for the “perl5” language.

Generator Expressions

  • The “$<BUILD_LOCAL_INTERFACE:…>” generator expression was added to
    prevent usage requirements from being exported to dependent
    projects.

CTest

  • The “CTEST_NO_TESTS_ACTION” environment variable was added to
    provide a default value for the “–no-tests=<action>” command line
    argument of “ctest(1)”.

Deprecated and Removed Features

  • The “CMakeFiles/CMakeOutput.log” and “CMakeFiles/CMakeError.log”
    files are no longer populated by CMake’s built-in modules.
    “cmake(1)” no longer suggests looking at them after a “CMake Error”
    occurs. Information previously logged to those files is instead
    logged to the “cmake-configure-log(7)”.

  • On CYGWIN, the undocumented “CMAKE_LEGACY_CYGWIN_WIN32” mode for
    compatibility with CMake versions older than 2.8.4 has been removed.

Other Changes

  • Language Standard Flags, such as “-std=c++11”, when generated due to
    “target_compile_features()” or “CMAKE_<LANG>_STANDARD”, are now
    placed before flags added by “target_compile_options()”, rather than
    after them.

  • For all “COMPILE_DEFINITIONS” properties, any leading “-D” on an
    item is removed whether or not it was specified by a generator
    expression.

  • The “compile_commands.json” database enabled by
    “CMAKE_EXPORT_COMPILE_COMMANDS” now provides the “output” field in
    the compile commands objects. This allows multi-config generators,
    such as the “Ninja Multi-Config” generator, to provide the compile
    commands for all configurations.

  • The “USE_FOLDERS” global property is treated as “ON” by default. See
    policy “CMP0143”.

  • The top-level “project()” call will now emit an author warning if
    the documented command order in relation to
    “cmake_minimum_required()” is not respected.

  • The “cmake --trace” option now follows “try_compile()” and
    “try_run()” invocations.


Changes made since CMake 3.26.0-rc4:

Brad King (5):

  • gitlab-ci: Update Windows builds to MSVC 14.35 toolset
  • Help: Document that CMAKE_MODULE_PATH must use forward slashes
  • Tests: Drop use of legacy “Dart” module
  • ccmake: Update minimum required version of CMake for curses check
  • CMake 3.26.0-rc5

Craig Scott (2):

  • Help: Improve wording of FOLDER-related properties and policies
  • Help: Fix typos and grammar in 3.26 release notes

Kyle Edwards (1):

  • FindOpenSSL: Search for -pthread flag

Marc Chevrier (1):

  • FindPython: fix erroneous ${CMAKE_SHARED_LIBRARY_SUFFIX} matching

scivision (1):

  • Help:try_{compile,run}: clarify, encourage new syntax