CMake 3.23.0-rc1 is ready for testing

February 8, 2022

I am proud to announce the first CMake 3.23 release candidate.
https://cmake.org/download/

Documentation is available at:
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

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)" gained support for specifying the
  "resolvePackageReferences" command line option in a build preset.

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_<NAME>" target properties were
  added to list files in the default header set and named header sets,
  respectively.

* The "HEADER_DIRS" and "HEADER_DIRS_<NAME>" 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
===============================

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

* issues an error in all cases when it's unable to compute the
  default architecture(s) if required (see "CMP0104"),

* handles "OFF" for "CMAKE_CUDA_ARCHITECTURES" on Clang,

* supports the theoretical case of multiple default architectures,
  and

* tries to detect invalid architectures and issue an error.

* "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.

Leave a Reply