# CMake 3.27.0-rc3 is ready for testing

**URL:** https://discourse.cmake.org/t/cmake-3-27-0-rc3-is-ready-for-testing/8367
**Category:** Announcements
**Created:** [June 20, 2023, 10:45pm UTC](https://discourse.cmake.org/t/cmake-3-27-0-rc3-is-ready-for-testing/8367 "2023-06-20T22:45:38Z")
**Posts on this page:** 5
**Page:** 1

<div class="post-metadata">

### Author: ![johnwparent](https://discourse.cmake.org/user_avatar/discourse.cmake.org/johnwparent/32/2179_2.png) [@johnwparent](https://discourse.cmake.org/u/johnwparent)
#### Post date: [June 20, 2023, 10:45pm UTC](https://discourse.cmake.org/t/cmake-3-27-0-rc3-is-ready-for-testing/8367/1 "2023-06-20T22:45:39Z")

</div>

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

Documentation is available at:  
[https://cmake.org/cmake/help/v3.27](https://cmake.org/cmake/help/v3.27)

Release notes appear below and are also published at  
[https://cmake.org/cmake/help/v3.27/release/3.27.html](https://cmake.org/cmake/help/v3.27/release/3.27.html)

Some of the more significant changes in CMake 3.27 are:

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

- The Visual Studio Generators for VS 2015 and above learned to select  
the Windows SDK version explicitly using a “version=” field in the  
“CMAKE\_GENERATOR\_PLATFORM” variable. See Visual Studio Platform  
Selection.

- Apple text-based stubs (i.e. “.tbd” files) may now be created for  
shared libraries on macOS. See the “ENABLE\_EXPORTS” property.

- The “SKIP\_LINTING” source file property was added to suppress  
target-wide code checks on specific sources.

- The “COMPILE\_ONLY” generator expression was added to specify  
compilation usage requirements without any linking requirements.

- Compatibility with versions of CMake older than 3.5 is now  
deprecated and will be removed from a future version. Calls to  
“cmake\_minimum\_required()” or “cmake\_policy()” that set the policy  
version to an older value now issue a deprecation diagnostic.

- The “FindCUDA” module, which has been deprecated since CMake 3.10,  
has been removed by policy “CMP0146”. Port projects to CMake’s  
first-class “CUDA” language support.

- The “FindPythonInterp” and “FindPythonLibs” modules, which have been  
deprecated since CMake 3.12, have been removed by policy “CMP0148”.  
Port projects to “FindPython3”, “FindPython2”, or “FindPython”.

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

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

- “cmake-presets(7)” files now support schema version “7”.

- “cmake-presets(7)” now supports “$penv{}” macro expansion in  
“include” fields.

## Generators

- The Makefile and Ninja generators now support using the “–  
dependency-file” linker flag, added by GNU Binutils 2.35 and LLVM’s  
LLD 12.0.0, so that files read by the linker will cause a relink if  
they change (typically modified timestamps). See the  
“CMAKE\_LINK\_DEPENDS\_USE\_LINKER” variable.

- The Visual Studio Generators for VS 2015 and above learned to select  
the Windows SDK version explicitly using a “version=” field in the  
“CMAKE\_GENERATOR\_PLATFORM” variable. See Visual Studio Platform  
Selection.

## 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

- The “add\_custom\_command()” command gained a new  
“DEPENDS\_EXPLICIT\_ONLY” option to tell the Ninja Generators not to  
add any dependencies implied by the target to which it is attached.  
The “CMAKE\_ADD\_CUSTOM\_COMMAND\_DEPENDS\_EXPLICIT\_ONLY” variable was  
added to enable “DEPENDS\_EXPLICIT\_ONLY” on all calls to  
“add\_custom\_command()” command.

- The “cmake\_file\_api()” command was added for projects to add “CMake  
file API” queries for the current CMake run.

- The “find\_package()” command now searches prefixes specified by  
upper-case “\_ROOT” CMake variables and upper-case  
“\_ROOT” environment variables. See policy “CMP0144”.

- The “install(CODE)” and “install(SCRIPT)” commands now support the  
“$\<INSTALL\_PREFIX\>” generator expression.

## Variables

- The “CMAKE\_DLL\_NAME\_WITH\_SOVERSION” variable and associated  
“DLL\_NAME\_WITH\_SOVERSION” target property were added to optionally  
append the “SOVERSION” to the filename of the “.dll” part of a  
shared library on Windows.

- Variables “CMAKE\_VS\_DEBUGGER\_COMMAND”,  
“CMAKE\_VS\_DEBUGGER\_COMMAND\_ARGUMENTS”,  
“CMAKE\_VS\_DEBUGGER\_ENVIRONMENT”, and  
“CMAKE\_VS\_DEBUGGER\_WORKING\_DIRECTORY” were added to initialize  
corresponding target properties.

- The “CMAKE\_VS\_WINDOWS\_TARGET\_PLATFORM\_MIN\_VERSION” variable was  
added to initialize the “VS\_WINDOWS\_TARGET\_PLATFORM\_MIN\_VERSION”  
target property on all targets when they are created.

## Properties

- A “CUDA\_CUBIN\_COMPILATION” target property was added to Object  
Libraries to support compiling to “.cubin” files instead of host  
object files. Currently only supported with NVIDIA.

- A “CUDA\_FATBIN\_COMPILATION” target property was added to Object  
Libraries to support compiling to “.fatbin” files instead of host  
object files. Currently only supported with NVIDIA.

- A “CUDA\_OPTIX\_COMPILATION” target property was added to Object  
Libraries to support compiling to “.optixir” files instead of host  
object files. Currently only supported with NVIDIA.

- The “\_CLANG\_TIDY”, “\_CPPCHECK”, “\_CPPLINT”, and  
“\_INCLUDE\_WHAT\_YOU\_USE”, target properties now support  
“generator expressions”.

- The “\_LINKER\_LAUNCHER” target property now supports “generator  
expressions”.

- The “SKIP\_LINTING” source file property was added to suppress  
target-wide code checks on specific sources.

## 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

- The “COMPILE\_ONLY” generator expression was added to specify  
compilation usage requirements without any linking requirements.

- “$LIST:...” generator expressions were added for query,  
transformation, and ordering operations on lists.

- “$PATH:...” generator expressions for decomposition and  
transformation operations learned to process lists of paths element-  
wise.

## Autogen

- The “CMAKE\_AUTOMOC\_EXECUTABLE”, “CMAKE\_AUTORCC\_EXECUTABLE”, and  
“CMAKE\_AUTOUIC\_EXECUTABLE” variables were added to initialize the  
corresponding target properties as targets are created.

- The “AUTOGEN\_USE\_SYSTEM\_INCLUDE” target property and corresponding  
“CMAKE\_AUTOGEN\_USE\_SYSTEM\_INCLUDE” variable were added to explicitly  
control whether autogen headers are considered system headers.

- The “INTERFACE\_AUTOMOC\_MACRO\_NAMES” target property was added to  
specify macro names for “moc” as a transitive usage requirement.

## CTest

- The “TIMEOUT\_SIGNAL\_NAME” and “TIMEOUT\_SIGNAL\_GRACE\_PERIOD” test  
properties were added to specify a POSIX signal to send to a test  
process when its timeout is reached.

## CPack

- The “CPack Inno Setup Generator” was added to package using Inno  
Setup.

# Deprecated and Removed Features

- Compatibility with versions of CMake older than 3.5 is now  
deprecated and will be removed from a future version. Calls to  
“cmake\_minimum\_required()” or “cmake\_policy()” that set the policy  
version to an older value now issue a deprecation diagnostic.

- The Extra Generators have been deprecated. IDEs may use the “cmake-  
file-api(7)” to view CMake-generated project build trees.

- The “FindCUDA” module, which has been deprecated since CMake 3.10,  
has been removed by policy “CMP0146”. Port projects to CMake’s  
first-class “CUDA” language support.

- The “FindPythonInterp” and “FindPythonLibs” modules, which have been  
deprecated since CMake 3.12, have been removed by policy “CMP0148”.  
Port projects to “FindPython3”, “FindPython2”, or “FindPython”.

- The “Dart” and “FindDart” modules have been deprecated via policy  
“CMP0145”. Port projects to the “CTest” module.

- The “Visual Studio 9 2008” generator is now deprecated and will be  
removed in a future version of CMake.

# 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”.

* * *

Changes made since CMake 3.27.0-rc2:

Brad King (11):

- Utilities/Sphinx: Fix flake8 E124 diagnostic in cmake.py
- Utilities/Sphinx: Restore explicit check for Sphinx 2.x or later
- Tests: Find GIT\_EXECUTABLE early enough to use in all tests
- Tests: Require git to enable RunCMake.CMP0150 test
- Help: Add 3.27 release note for TARGET\_RUNTIME\_DLL\_DIRS
- ci: Drop unnecessary -stdlib flag from macOS package
- ci: Split macOS 10.10+ and 10.13+ package language standard selection
- ci: Build macOS 10.13+ package as C++17
- FindPostgreSQL: Add support for version 15
- Android: Restore platform id vars with legacy toolchain file
- CMake 3.27.0-rc3

Jannik Beyerstedt (1):

- FindProtobuf: Support new version number scheme

Marc Chevrier (1):

- list(): restore SUBLIST behavior

Markus Ferrell (1):

- Tutorial: Extend literal include to contain full code changes in solution

Matthew Woehlke (2):

- Utilities/Sphinx: Don’t ignore flake8 E402
- Utilities/Sphinx: Fix some flake8 gripes

---

<div class="post-metadata">

### Author: ![neundorf](https://discourse.cmake.org/user_avatar/discourse.cmake.org/neundorf/32/2075_2.png) [@neundorf](https://discourse.cmake.org/u/neundorf)
#### Post date: [June 21, 2023, 8:53pm UTC](https://discourse.cmake.org/t/cmake-3-27-0-rc3-is-ready-for-testing/8367/2 "2023-06-21T20:53:44Z")

</div>

The release notes only mention that TARGET\_RUNTIME\_DLL\_DIRS is now mentioned in the release notes, but it is actually not mentioned in the generator expressions section 😉

---

<div class="post-metadata">

### Author: ![brad.king](https://discourse.cmake.org/user_avatar/discourse.cmake.org/brad.king/32/11_2.png) [@brad.king](https://discourse.cmake.org/u/brad.king)
#### Post date: [June 22, 2023, 3:37pm UTC](https://discourse.cmake.org/t/cmake-3-27-0-rc3-is-ready-for-testing/8367/3 "2023-06-22T15:37:46Z")

</div>

`TARGET_RUNTIME_DLL_DIRS` is mentioned in the [published release notes](https://cmake.org/cmake/help/v3.27/release/3.27.html#generator-expressions) too, it just wasn’t added to the announcement text. We’ll add it for the next one.

---

<div class="post-metadata">

### Author: ![silverqx](https://discourse.cmake.org/user_avatar/discourse.cmake.org/silverqx/32/2353_2.png) [@silverqx](https://discourse.cmake.org/u/silverqx)
#### Post date: [June 28, 2023, 2:46pm UTC](https://discourse.cmake.org/t/cmake-3-27-0-rc3-is-ready-for-testing/8367/4 "2023-06-28T14:46:55Z")

</div>

> - “$LIST:…” generator expressions were added for query,  
> transformation, and ordering operations on lists.
> - “$PATH:…” generator expressions for decomposition and  
> transformation operations learned to process lists of paths element-  
> wise.

Links for these don’t work they are empty.

---

<div class="post-metadata">

### Author: ![craig.scott](https://discourse.cmake.org/user_avatar/discourse.cmake.org/craig.scott/32/20_2.png) [@craig.scott](https://discourse.cmake.org/u/craig.scott)
#### Post date: [June 28, 2023, 11:43pm UTC](https://discourse.cmake.org/t/cmake-3-27-0-rc3-is-ready-for-testing/8367/5 "2023-06-28T23:43:24Z")

</div>

The links in the original post are not working, but the links in the official docs do work. This is probably an artefact of the way the release notes are collected for posting here in the forums. There are various formatting problems with that process, resulting in anything that looks like a HTML tag being mishandled. Various quoting and font selection aspects are also usually messed up. Consider the notes posted here in these forums as informational, but the ones at [https://cmake.org/cmake/help/latest/index.html](https://cmake.org/cmake/help/latest/index.html) are the official ones that matter.
