CMake 3.27 Release Notes

Changes made since CMake 3.26 include the following.

New Features

Debugger

  • cmake(1) now supports interactive debugging of the CMake language. See the --debugger option.

Presets

Generators

Languages

  • The CXX language now treats source file extensions .ccm, .cxxm, and .c++m as C++.

File-Based API

  • The cmake-file-api(7) "codemodel" version 2 version field has been updated to 2.6.

  • The cmake-file-api(7) "codemodel" version 2 "target" object gained a new "frameworks" field in the "compileGroups" objects.

Platforms

  • Apple text-based stubs (i.e. .tbd files) may now be created for shared libraries on macOS. See the ENABLE_EXPORTS property.

Commands

Variables

Properties

Modules

  • The FindCUDAToolkit module now provides an imported target for cudla, and imported targets for CUPTI's nvperf and pcsampling components.

  • The FindDoxygen module's doxygen_add_docs() command gained a CONFIG_FILE option to specify a custom doxygen configuration file.

  • The FindOpenGL module gained support for components GLES2 and GLES3.

  • The FindwxWidgets module now provides an imported target.

Generator Expressions

Autogen

CTest

CPack

Deprecated and Removed Features

Other Changes

  • cmake --build $dir --verbose will now print the working directory and command line used to perform the build.

  • The ExternalProject and FetchContent modules now resolve relative GIT_REPOSITORY paths as relative to the parent project's remote, not as a relative local file system path. See CMP0150.

  • The ExternalProject configure step no longer re-runs on every build when the UPDATE_DISCONNECTED option is enabled. It will only re-run if details of the download, update, or patch step change.

  • The ExternalProject update and patch steps now always re-run if any of their details change, even if the UPDATE_DISCONNECTED option is enabled. If using the GIT download method, and the GIT_TAG is changed to a commit that is not already known locally, an error is now issued instead of silently using the previous GIT_TAG.

  • The FindPython, FindPython2 and FindPython3 modules now support the Windows ARM64 platform.

  • The file(GET_RUNTIME_DEPENDENCIES) command now case-preserves DLL names reported on Windows. They are still converted to lowercase for filter matching.

  • The SYSTEM target property is now honored for Apple Frameworks.

  • Visual Studio Generators, for VS 15.8 (2017) and newer, now build custom commands in parallel. See policy CMP0147.

  • Visual Studio Generators for VS 14 (2015) and above now prefer to select the latest Windows SDK version. See policy CMP0149.

Updates

Changes made since CMake 3.27.0 include the following.

3.27.1

  • This version made no changes to documented features or interfaces. Some implementation updates were made to support ecosystem changes and/or fix regressions.

3.27.2

  • Visual Studio Generators for VS 14 (2015) and above now prefer to select the latest Windows SDK, as documented by policy CMP0149, when targeting any version of Windows. In CMake 3.27.[0-1] the preference was limited to targeting Windows 10 and above.

  • Visual Studio Generators for VS 14 (2015) and above now support using version=8.1 in the CMAKE_GENERATOR_PLATFORM variable to select the Windows 8.1 SDK. In CMake 3.27.[0-1] the version= field was limited to selecting Windows 10 SDKs.

3.27.3, 3.27.4, 3.27.5, 3.27.6, 3.27.7, 3.27.8

  • These versions made no changes to documented features or interfaces. Some implementation updates were made to support ecosystem changes and/or fix regressions.

3.27.9

  • The cmake-file-api(7) "codemodel" version 2 "target" object fileSets field was introduced by CMake 3.26.0 with entries of its baseDirectories member incorrectly expressed as absolute paths even if they are inside the top-level source directory. This was fixed in CMake 3.26.6 and has now been fixed in 3.27.9. Clients must be updated to expect relative paths under the top-level source directory.

  • Fortran module dependency scanning in Ninja Generators was updated by CMake 3.27.0 to use exact collation dependencies. This was supposed to fix subtle rebuild failures when moving module sources among targets. Since then, several cases have been found in which exact collation dependencies were incorrectly computed when using Object Libraries. Some of these cases were incrementally fixed through the 3.27.x patch series, but additional more subtle cases have since been found. In order to avoid further churn in the 3.27 release series, the original change has been reverted and deferred to a future version of CMake.