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