# CMake 3.27.0-rc5 is ready for testing

**URL:** https://discourse.cmake.org/t/cmake-3-27-0-rc5-is-ready-for-testing/8521
**Category:** Announcements
**Created:** [July 14, 2023, 4:19pm UTC](https://discourse.cmake.org/t/cmake-3-27-0-rc5-is-ready-for-testing/8521 "2023-07-14T16:19:24Z")
**Posts on this page:** 1
**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: [July 14, 2023, 4:19pm UTC](https://discourse.cmake.org/t/cmake-3-27-0-rc5-is-ready-for-testing/8521/1 "2023-07-14T16:19:24Z")

</div>

I am proud to announce the fifth 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 “\<PACKAGENAME\>\_ROOT” CMake variables and upper-case  
“\<PACKAGENAME\>\_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 “\<LANG\>\_CLANG\_TIDY”, “\<LANG\>\_CPPCHECK”, “\<LANG\>\_CPPLINT”, and  
“\<LANG\>\_INCLUDE\_WHAT\_YOU\_USE”, target properties now support  
“generator expressions”.

- The “\<LANG\>\_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.

- The “TARGET\_IMPORT\_FILE”, “TARGET\_IMPORT\_FILE\_BASE\_NAME”,  
“TARGET\_IMPORT\_FILE\_PREFIX”, “TARGET\_IMPORT\_FILE\_SUFFIX”,  
“TARGET\_IMPORT\_FILE\_NAME”, and “TARGET\_IMPORT\_FILE\_DIR”  
generator expressions were added. These expand to details about the  
linker import file for a target.

- The “TARGET\_RUNTIME\_DLL\_DIRS” generator expression was added. It  
expands to a list of the directories containing DLLs in  
“TARGET\_RUNTIME\_DLLS”.

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

Alexandru Croitor (1):

- cmWorkerPool: Show process exit code / signal number upon failure

Ben Boeckel (1):

- Ninja: include module mapper flags in `compile_commands.json`

Ben McMorran (2):

- Debugger: Correctly handle clients without supportsVariableType
- Debugger: Always clear existing breakpoints on setBreakpoints

Brad King (6):

- HIP: Fix search for hip-lang CMake package on Fedora distros
- MSVC: Restore support for non-incremental linking without ‘rc’ in PATH
- Genex: Restore REMOVE\_DUPLICATES preservation of empty elements
- Android: Restore platform info and search paths shared with Linux
- Utilities/Sphinx: Restore html search index link anchors
- CMake 3.27.0-rc5

Cordell Bloor (1):

- HIP: Add HIP language to Vim syntax highlighting

Craig Scott (4):

- Help: Add missing versionadded for TARGET\_IMPORT\_FILE\_DIR genex
- Help: Add TARGET\_IMPORT\_FILE… genexes to 3.27 release notes
- Help: Fix typos, formatting and wording for TARGET\_IMPORT\_FILE genexes
- Help: Improve formatting and wording of LIST generator expressions

Jannik Beyerstedt (1):

- FindProtobuf: Fix new version number scheme

Mehdi Chinoune (1):

- FindProtobuf: Fix linking to shared libraries on MinGW
