# CMake 3.23.0-rc4 is ready for testing

**URL:** https://discourse.cmake.org/t/cmake-3-23-0-rc4-is-ready-for-testing/5247
**Category:** Announcements
**Created:** [March 18, 2022, 3:28pm UTC](https://discourse.cmake.org/t/cmake-3-23-0-rc4-is-ready-for-testing/5247 "2022-03-18T15:28:46Z")
**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: [March 18, 2022, 3:28pm UTC](https://discourse.cmake.org/t/cmake-3-23-0-rc4-is-ready-for-testing/5247/1 "2022-03-18T15:28:46Z")

</div>

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

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

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

Some of the more significant changes in CMake 3.23 are:

- “cmake-presets(7)” files now have an optional “include” field, which  
allows the files to include other files.

- The Visual Studio Generators for VS 2019 and above learned to  
support .NET SDK-style project files (“.csproj”) for C# projects.  
See the “DOTNET\_SDK” target property and corresponding  
“CMAKE\_DOTNET\_SDK” variable. “add\_custom\_command()” is not yet  
supported in .NET SDK-style projects.

- The IBM Open XL C/C++ compiler, based on LLVM, is now supported with  
compiler id “IBMClang”.

- The MCST LCC compiler is now supported with compiler id “LCC”. See  
policy “CMP0129”.

- The “install(TARGETS)” command gained a new “FILE\_SET” argument,  
which can be used to install header file sets associated with a  
target.

- The “target\_sources()” command gained a new “FILE\_SET” mode, which  
can be used to add headers as header-only source files of a target.

- The “CMAKE\_CUDA\_ARCHITECTURES” variable and associated  
“CUDA\_ARCHITECTURES” target property now support the “all”, and  
“all-major” values for CUDA toolkit 7.0+.

# CMake 3.23 Release Notes

#### Changes made since CMake 3.22 include the following.

## New Features

### Presets

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

- “cmake-presets(7)” files now have an optional “include” field, which  
allows the files to include other files.

- “cmake-presets(7)” files now support a “${fileDir}” macro, which  
contains the directory containing the preset file.

- “cmake-presets(7)” gained support for specifying the  
“resolvePackageReferences” command line option in a build preset to  
control restoration behavior of package references from external  
package managers. Currently this is only supported by the Visual  
Studio generator to support restoring packages from NuGet. Other  
generators ignore this option.

### Generators

- The Visual Studio Generators for VS 2019 and above learned to  
support .NET SDK-style project files (“.csproj”) for C# projects.  
See the “DOTNET\_SDK” target property and corresponding  
“CMAKE\_DOTNET\_SDK” variable. “add\_custom\_command()” is not yet  
supported in .NET SDK-style projects.

- The Visual Studio Generators for VS 2017 and above learned to use  
portable instances of Visual Studio not known to the VS installer.  
See the “CMAKE\_GENERATOR\_INSTANCE” variable.

### Command-Line

- The “cmake(1)” “–build” command, when used with Visual Studio  
Generators on projects that set the “VS\_PACKAGE\_REFERENCES” target  
property, now automatically restores package references from NuGet.  
The cache variable “CMAKE\_VS\_NUGET\_PACKAGE\_RESTORE” may be set to  
toggle this behavior in a build tree. Use the “–resolve-package-  
references=\<on|off|only\>” command-line option to control the  
behavior on one invocation.

- The “cmake(1)” command line tool gained a “–debug-find-pkg=” option  
to enable debug messages under specific “find\_package()” calls.

- The “cmake(1)” command line tool gained a “–debug-find-var=” option  
to enable debug messages for “find\_\*” calls that use specific result  
variables.

### Compilers

- The IBM Open XL C/C++ compiler, based on LLVM, is now supported with  
compiler id “IBMClang”.

- The MCST LCC compiler is now supported with compiler id “LCC”. See  
policy “CMP0129”.

### File-Based API

- The “cmake-file-api(7)” “codemodel” version 2 “version” field has  
been updated to “2.4”.

- The “cmake-file-api(7)” “codemodel” version 2 “directory” object  
“installers” field gained a new “fileSet” installer type.

### Commands

- The “define\_property()” command gained a new  
“INITIALIZE\_FROM\_VARIABLE” option to cause a target property to be  
initialized from a variable when a target is created.

- The “install(TARGETS)” command gained a new “FILE\_SET” argument,  
which can be used to install header file sets associated with a  
target.

- The “string(TIMESTAMP)” and “file(TIMESTAMP)” commands now support  
the “%f” specifier for microseconds.

- The “target\_sources()” command gained a new “FILE\_SET” mode, which  
can be used to add headers as header-only source files of a target.

### Variables

- The “CMAKE\_CUDA\_ARCHITECTURES” variable and associated  
“CUDA\_ARCHITECTURES” target property now support the “all”, and  
“all-major” values for CUDA toolkit 7.0+.

- The “CMAKE\_IGNORE\_PREFIX\_PATH” and “CMAKE\_SYSTEM\_IGNORE\_PREFIX\_PATH”  
variables were added to tell the “find\_package()”, “find\_program()”,  
“find\_library()”, “find\_path()”, and “find\_file()” commands to  
ignore specified prefixes.

- The “CMAKE\_LINK\_LIBRARIES\_ONLY\_TARGETS” variable and corresponding  
“LINK\_LIBRARIES\_ONLY\_TARGETS” target property were added to  
optionally require that all link items that can be target names are  
actually names of existing targets.

### Properties

- The “HEADER\_SETS” and “INTERFACE\_HEADER\_SETS” target properties were  
added to list header sets associated with a target.

- The “HEADER\_SET” and “HEADER\_SET\_” target properties were  
added to list files in the default header set and named header sets,  
respectively.

- The “HEADER\_DIRS” and “HEADER\_DIRS\_” target properties were  
added to specify the base directories of the default header set and  
named header sets, respectively.

- The “IMPORTED\_NO\_SYSTEM” target property was added to specify that  
an Imported Target should not be treated as a system library (i.e.  
its include directories are not automatically “SYSTEM”).

- The “INTERFACE\_LINK\_LIBRARIES\_DIRECT” and  
“INTERFACE\_LINK\_LIBRARIES\_DIRECT\_EXCLUDE” target properties were  
added to express usage requirements affecting a consumer’s direct  
link dependencies.

- The “XCODE\_EMBED\_PLUGINS” target property was added to tell the  
“Xcode” generator what targets to put in the “Embed PlugIns” build  
phase.

- The “XCODE\_SCHEME\_ENABLE\_GPU\_FRAME\_CAPTURE\_MODE” target property and  
supporting “CMAKE\_XCODE\_SCHEME\_ENABLE\_GPU\_FRAME\_CAPTURE\_MODE”  
variable were added to tell the “Xcode” generator to enable  
specifying the Xcode scheme option property “GPU Frame Capture”.

### Modules

- The “CheckPIESupported” module now supports the “OBJC”, “OBJCXX”,  
“CUDA”, and “HIP” languages. It also now honors “CMAKE\_SYSROOT” and  
“CMAKE\_OSX\_SYSROOT”.

- The “ExternalProject” module’s “ExternalProject\_Add()” command  
gained support for a “USES\_TERMINAL\_PATCH” option to give the patch  
step exclusive terminal access.

- The “FindCUDAToolkit” module now provides a target for  
“libcufft\_static\_nocallback”, if found.

- The “FindGLUT” module now provides the “GLUT\_INCLUDE\_DIRS” result  
variable to conform with naming conventions documented in the  
“cmake-developer(7)” manual. This supersedes the legacy  
“GLUT\_INCLUDE\_DIR” variable.

- The “FindGTest” module now provides a target for GMock, if found.

- The “FindVulkan” module now provides a “Vulkan\_VERSION” result  
variable reporting the version number.

### CTest

- “ctest(1)” gained a new “CTEST\_SUBMIT\_INACTIVITY\_TIMEOUT” variable,  
which can be used to specify a timeout for submission inactivity.

### CPack

- The “CPack productbuild Generator” gained the new  
“CPACK\_PRODUCTBUILD\_DOMAINS”, “CPACK\_PRODUCTBUILD\_DOMAINS\_ANYWHERE”,  
“CPACK\_PRODUCTBUILD\_DOMAINS\_USER”, and  
“CPACK\_PRODUCTBUILD\_DOMAINS\_ROOT” variables for adding the domains  
element to the Distribution XML.

- The “CPack productbuild Generator” gained a new variable,  
“CPACK\_PRODUCTBUILD\_IDENTIFIER”, used to customize the unique  
product identifier associated with the product.

- The “CPack IFW Generator” gained the new “CPACK\_IFW\_ARCHIVE\_FORMAT”  
and “CPACK\_IFW\_ARCHIVE\_COMPRESSION” variables for setting the format  
used when packaging new component data archives, and choosing the  
compression level used. These features are available for QtIFW 4.2  
and newer.

- The “CPack IFW Generator” gained new  
“CPACK\_IFW\_PACKAGE\_DISABLE\_COMMAND\_LINE\_INTERFACE” variable to  
prevent the user from passing any consumer command to the installer,  
like “install”, “update”, and “remove”. This feature is available  
for QtIFW 4.0 and newer.

- The “CPack IFW Generator” gained the new  
“CPACK\_IFW\_PACKAGE\_PRODUCT\_IMAGES” variable for adding a list of  
images to be shown on the “PerformInstallationPage”. This feature is  
available for QtIFW 4.0 and newer.

- The “CPack IFW Generator” gained the new  
“CPACK\_IFW\_PACKAGE\_RUN\_PROGRAM”,  
“CPACK\_IFW\_PACKAGE\_RUN\_PROGRAM\_ARGUMENTS”, and  
“CPACK\_IFW\_PACKAGE\_RUN\_PROGRAM\_DESCRIPTION” variables for executing  
a command after the installer is done if the user accepts the  
action. This feature is available for QtIFW 4.0 and newer.

- The “CPack IFW Generator” gained the new  
“CPACK\_IFW\_PACKAGE\_SIGNING\_IDENTITY” variable for specifying a code  
signing identity to be used for signing the generated app bundle.  
This feature is available on macOS only, and for QtIFW 3.0 and  
newer.

- The “CPack WIX Generator” gained a new variable,  
“CPACK\_WIX\_SKIP\_WIX\_UI\_EXTENSION”, to skip the inclusion of  
WixUIExtensions.

## Deprecated and Removed Features

- “cmake(1)” now warns when multiple source paths are specified, as in  
“cmake -S src1 src2”. This has never been officially documented or  
supported, but older versions accidentally accepted multiple source  
paths and used the last path specified. Update scripts to avoid  
passing multiple source path arguments.

- The “cpack(1)” undocumented “OSXX11” generator has been removed.

## Other Changes

- The “CPack DragNDrop Generator” no longer attaches  
“CPACK\_RESOURCE\_FILE\_LICENSE” as the license agreement in the  
generated “.dmg” unless explicitly activated by a  
“CPACK\_DMG\_SLA\_USE\_RESOURCE\_FILE\_LICENSE” option. In CMake projects,  
the “CPack” module enables the option by default for compatibility.

- “CUDA” targets may now enable both “CUDA\_SEPARABLE\_COMPILATION” and  
“CUDA\_PTX\_COMPILATION”.

- “CUDA” compiler detection now:

- “CUDA” with Clang now implements policy “CMP0105” and the  
“$\<DEVICE\_LINK:…\>” and “$\<HOST\_LINK:…\>” “generator expressions”.

- The “define\_property()” command’s “BRIEF\_DOCS” and “FULL\_DOCS”  
arguments are now optional.

- “ccmake(1)” may now be enabled on Windows when building CMake from  
source. This is experimental, and so is not included in official  
distributions.

* * *

Changes made since CMake 3.23.0-rc3:

Brad King (7):

- ExternalProject: Document that LIST\_SEPARATOR works for CMAKE\_ARGS too
- Help: Add advice for dealing with semicolons in lists
- Help: Clarify that ENVIRONMENT test properties take ;-separated lists
- BinUtils: Restore llvm-ar fallback on Apple platforms  
target\_link\_libraries: Restore LINK\_ONLY for multiple static lib dependencies
- Help: Document warning about multiple source paths  
CMake 3.23.0-rc4

Craig Scott (2):

- Help: Clarify behavior of search ignore-related variables
- Help: Fix typo and improve readability for LINK\_LIBRARIES\_ONLY\_TARGETS

Kai Pastor (1):

- FindPostgreSQL: Update known versions in documentation

Ken Matsui (1):

- AppleClang: Add C++20 and C++23 flags

Kyle Edwards (1):

- Help: Clarify interaction of LANGUAGE and HEADER\_FILE\_ONLY

Marc Chevrier (1):

- FindPython: fix various problems using pypy interpreters

Michael Hirsch (1):

- FindMatlab: Add R2022a =\> 9.12 version

Robert Maynard (2):

- Help: Document cmake source and binary dir selection rules
- cmake: Always prefer the last source directory

---

<div class="post-metadata">

### Author: ![gabyx](https://discourse.cmake.org/user_avatar/discourse.cmake.org/gabyx/32/2107_2.png) [@gabyx](https://discourse.cmake.org/u/gabyx)
#### Post date: [March 21, 2022, 8:00am UTC](https://discourse.cmake.org/t/cmake-3-23-0-rc4-is-ready-for-testing/5247/2 "2022-03-21T08:00:28Z")

</div>

Hi @brad.king : Do you know when the 3.23.? will be released? What will be the approx date? Thanks.

---

<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: [March 21, 2022, 4:30pm UTC](https://discourse.cmake.org/t/cmake-3-23-0-rc4-is-ready-for-testing/5247/3 "2022-03-21T16:30:37Z")

</div>

The `3.23.0` release has no hard date. After `-rc1` we do additional release candidates as needed based on feedback.
