# CMake 3.26.0-rc5 is ready for testing

**URL:** https://discourse.cmake.org/t/cmake-3-26-0-rc5-is-ready-for-testing/7577
**Category:** Announcements
**Created:** [March 1, 2023, 5:26pm UTC](https://discourse.cmake.org/t/cmake-3-26-0-rc5-is-ready-for-testing/7577 "2023-03-01T17:26:15Z")
**Posts on this page:** 1
**Page:** 1

<div class="post-metadata">

### Author: ![Tom\_Osika](https://discourse.cmake.org/user_avatar/discourse.cmake.org/tom_osika/32/1101_2.png) [@Tom\_Osika](https://discourse.cmake.org/u/Tom_Osika)
#### Post date: [March 1, 2023, 5:26pm UTC](https://discourse.cmake.org/t/cmake-3-26-0-rc5-is-ready-for-testing/7577/1 "2023-03-01T17:26:15Z")

</div>

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

Documentation is available at:  
[https://cmake.org/cmake/help/v3.26](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](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:

## Modules

- The “ExternalProject” module’s “ExternalProject\_Add()” command  
gained an “INSTALL\_BYPRODUCTS” option to specify files generated by  
the “install” step.

- The “FindCUDAToolkit” module:

- 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
