CMake 3.23.0-rc2 is ready for testing

February 23, 2022

I am proud to announce the second 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 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_<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.

----------------------------------------------------------------------------
Changes made since CMake 3.23.0-rc1:

Axel Huebl (1):
  FindHDF5: Tolerate failure during compiler interrogation

Brad King (22):
  Intel: Add dependencies on system header files on Windows
  Help: Clarify precedence of AND and OR in 'if' conditions
  cmFindPackageCommand: Drop ComputeIfDebugModeWanted overload
  Tests: Improve order of RunCMake.find_package cases
  find_package: Improve formatting of --debug-find output
  find_package: Fix find module name in --debug-find output
  find_package: Mention package name in Config mode debug output
  find_package: Avoid printing debug output header multiple times
  find_package: Improve --debug-find-pkg= when using a find module
  FortranCInterface: Fix mangling detection for x86_64 on arm64 macOS
  Help: Organize and clarify export() command documentation
  Help: Clarify version specification in CMAKE_GENERATOR_INSTANCE
  target_link_libraries: Remove likely-broken ancient compatibility check
  target_link_libraries: Handle keyword arguments in dedicated code path
  target_link_libraries: Improve tolerance of unquoted generator expressions
  Tests: Fix CudaOnly.SeparateCompilationPTX test project name
  Tests: Add RunCMake helper to run cmake with raw execute_process args
  libarchive: Fix OpenSSL crypto library checks for build inside CMake
  Tests: Add missing guards on Qt4 and Qt5 tests
  CheckTypeSize: Modernize and clarify documentation
  CUDA: Restore support for non-"all" CUDA_ARCHITECTURES with nvcc 11.5+
  CMake 3.23.0-rc2

Carsten Rudolph (2):
  cmake --build: prioritize --resolve-package-references over preset
  Help: Clarify how package resolve mode is intended to be used

Connor Imes (1):
  Help: use package-specific var for supported component list

Craig Scott (2):
  Help: Fix typo and improve docs for --debug-find-pkg|var options
  cmake::GetDebugFindPkgOutput: Use consistent argument name

Deniz Bahadir (1):
  Windows/Clang: Support PDB when cross-compiling

Eugene Shalygin (1):
  install(TARGETS): Restore per-export INCLUDES DESTINATION

Evgeniy Shcherbina (1):
  GoogleTest: Fix escaping in test names

Heiko Thiel (1):
  Help: Add MSVC_TOOLSET_VERSION value for v143 toolset

Kyle Edwards (1):
  install(): Properly ignore FILE_SETs that don't exist

Ralf Habacker (1):
  Help: Document CMAKE_PLATFORM_NO_VERSIONED_SONAME

Robert Maynard (2):
  cmake: Ignore any empty "" command line arguments
  cmake: When given multiple source paths use last instead of first

Silvio Traversaro (1):
  FindGLUT: Use link directories for libs from pkg-config

Tom M (1):
  FindMatlab: Fix version detection for MCR >= 9.10

William R. Dieter (1):
  IntelLLVM: Add dependencies on system header files on Windows

Leave a Reply