# CMake 3.27.0 available for download

**URL:** https://discourse.cmake.org/t/cmake-3-27-0-available-for-download/8542
**Category:** Announcements
**Created:** [July 18, 2023, 7:55pm UTC](https://discourse.cmake.org/t/cmake-3-27-0-available-for-download/8542 "2023-07-18T19:55:22Z")
**Posts on this page:** 4
**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 18, 2023, 7:55pm UTC](https://discourse.cmake.org/t/cmake-3-27-0-available-for-download/8542/1 "2023-07-18T19:55:22Z")

</div>

We are pleased to announce that CMake 3.27.0 is now available for download.  
[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-rc5:

Brad King (2):

- Help: Mention imported config mapping in export() and install() docs
- CMake 3.27.0

Daniel Brondani (1):

- ARMClang: Fix computation of compiler semantic version patch level

Jannik Alber (1):

- InnoSetup: Always specify at least one component installation type

---

<div class="post-metadata">

### Author: ![Kelarov](https://discourse.cmake.org/user_avatar/discourse.cmake.org/kelarov/32/4927_2.png) [@Kelarov](https://discourse.cmake.org/u/Kelarov)
#### Post date: [July 20, 2023, 5:00pm UTC](https://discourse.cmake.org/t/cmake-3-27-0-available-for-download/8542/2 "2023-07-20T17:00:41Z")

</div>

Hi All.  
I just tried the new release(3.27) and had the `CMAKE_EXPERIMENTAL_CXX_MODULE_CMAKE_API` setting broken!  
I searched the CMake repo and saw the [commit 57ef353d222d7618f8fb872487aa70e205e56020](https://gitlab.kitware.com/cmake/cmake/-/blob/master/Help/dev/experimental.rst) on updating that UUID, changed mine to `bf70d4b0-9fb7-465c-9803-34014e70d112`, (I also tried setting the CMake Version Required to 3.27, see if that would help recognise the UUID), and still I got the error…

```auto
target_sources File set TYPE may only be "HEADERS"

```

…, which is the problem you get when that setting fails.

If I change things back to 3.26 and to …

```auto
set(CMAKE_EXPERIMENTAL_CXX_MODULE_CMAKE_API "2182bf5c-ef0d-489a-91da-49dbc3090d2a")

```

… then it works again.

It’s strange, because before that these two lines worked perfectly:

```auto
set(CMAKE_EXPERIMENTAL_CXX_MODULE_DYNDEP 1)
set(CMAKE_EXPERIMENTAL_CXX_MODULE_CMAKE_API "2182bf5c-ef0d-489a-91da-49dbc3090d2a")

```

I mean, I could just roll back to using 3.26.4, as I was before, no problem, I just would like to understand whether it’s a “me” problem or a CMake’s one. So, the question: Am I missing something?

PS: I’m on Windows, using the latest MSVC Version

Thank you.

---

<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: [July 21, 2023, 2:26pm UTC](https://discourse.cmake.org/t/cmake-3-27-0-available-for-download/8542/3 "2023-07-21T14:26:10Z")

</div>

> [@Kelarov](#):
>
> the `CMAKE_EXPERIMENTAL_CXX_MODULE_CMAKE_API` setting broken!

As an experimental feature, the setting is intentionally not stable across releases. You need to set that variable to the UUID matching whatever CMake release you’re using. See [Help/dev/experimental.rst](https://gitlab.kitware.com/cmake/cmake/-/blob/v3.27.0/Help/dev/experimental.rst) in the 3.27.0 release for its UUID: `aa1f7df0-828a-4fcd-9afc-2dc80491aca7`.

---

<div class="post-metadata">

### Author: ![Kelarov](https://discourse.cmake.org/user_avatar/discourse.cmake.org/kelarov/32/4927_2.png) [@Kelarov](https://discourse.cmake.org/u/Kelarov)
#### Post date: [July 21, 2023, 3:02pm UTC](https://discourse.cmake.org/t/cmake-3-27-0-available-for-download/8542/4 "2023-07-21T15:02:06Z")

</div>

Oh, so I meant the right thing 😅 - looking the Repo up, trying to find the new UUID for the new release - but I didn’t notice the “3.26.5” selected in the drop-down menu, instead of 3.27.0.

Thank you very much, Brad.  
It’s working now!
