# CMake 3.27.0-rc2 is ready for testing

**URL:** https://discourse.cmake.org/t/cmake-3-27-0-rc2-is-ready-for-testing/8315
**Category:** Announcements
**Created:** [June 12, 2023, 7:00pm UTC](https://discourse.cmake.org/t/cmake-3-27-0-rc2-is-ready-for-testing/8315 "2023-06-12T19:00:16Z")
**Posts on this page:** 3
**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 12, 2023, 7:00pm UTC](https://discourse.cmake.org/t/cmake-3-27-0-rc2-is-ready-for-testing/8315/1 "2023-06-12T19:00:16Z")

</div>

I am proud to announce the second\* 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)

\*Note: The first release candidate, 3.27.0-rc1, was released but not announced  
due to regressions discovered prior to the announcement process.

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-rc1:

Ben Boeckel (1):

- Makefiles: quote `$(COLOR)` expansions

Björn Esser (1):

- bootstrap: Add --(no-)system-cppdap configuration switch

Brad King (2):

- Modules: Restore unnecessary inclusions for compatibility
- CMake 3.27.0-rc2

Marc Chevrier (1):

- add\_test: Restore support for empty test arguments

---

<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 12, 2023, 9:03pm UTC](https://discourse.cmake.org/t/cmake-3-27-0-rc2-is-ready-for-testing/8315/2 "2023-06-12T21:03:17Z")

</div>

> [@johnwparent](#):
>
> RUNTIME\_

The new generator expression TARGET\_RUNTIME\_DLL\_DIRS might be worth mentioning.  
Maybe also that the Visual Studio generators now list the cmake files under the ZERO\_CHECK target.

---

<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 13, 2023, 3:11pm UTC](https://discourse.cmake.org/t/cmake-3-27-0-rc2-is-ready-for-testing/8315/3 "2023-06-13T15:11:17Z")

</div>

> [@neundorf](#):
>
> The new generator expression TARGET\_RUNTIME\_DLL\_DIRS might be worth mentioning.

That was added by [CMake MR 8247](https://gitlab.kitware.com/cmake/cmake/-/merge_requests/8247), which forgot to add a release note. [CMake MR 8558](https://gitlab.kitware.com/cmake/cmake/-/merge_requests/8558) adds it.

> [@neundorf](#):
>
> Maybe also that the Visual Studio generators now list the cmake files under the ZERO\_CHECK target.

That was added by [CMake MR 8260](https://gitlab.kitware.com/cmake/cmake/-/merge_requests/8260). I consider `ZERO_CHECK` to be an implementation detail. It is not mentioned in the VS generator documentation at all, so there is no place for a release note to point. [CMake Issue 22264](https://gitlab.kitware.com/cmake/cmake/-/issues/22264) requests more documentation of the builtin targets.
