CMake 3.23.0-rc3 is ready for testing

I am proud to announce the third 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)” 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

  • 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-rc2:

Alex Turbov (1):

  • while: Restore tolerance of condition error

Attila Krasznahorkay (1):

  • IRSL: Add paths for Intel oneAPI compilers on Linux

Brad King (20):

  • FindThreads: Revert “Honor THREADS_PREFER_PTHREAD_FLAG when … in libc”
  • CUDA: Simplify CMAKE_CUDA_ARCHITECTURES special value logic
  • Help: Update CUDA_ARCHITECTURES docs for generic all/all-major support
  • CUDA: Fix CMAKE_CUDA_ARCHITECTURES=all/all-major with NVCC 11.5+
  • Tests: Clarify RunCMake.CommandLine ExplicitDirs case names
  • Tests: Verify RunCMake.CommandLine ExplicitDirs source/build dirs
  • Tests: Add RunCMake.CommandLine ExplicitiDirs explicit work directory
  • VS: Fix CUDA compiler id with CMAKE_CUDA_ARCHITECTURES={all,all-major}
  • Tests: Add cases for CMAKE_CUDA_ARCHITECTURES={all,all-major}
  • gitlab-ci: run CUDA and HIP test jobs in any non-MR pipeline
  • ci: add cuda11.6 base image
  • gitlab-ci: add jobs testing cuda11.6 with nvcc and clang 13
  • BinUtils: Avoid llvm-ar on Apple platforms
  • Tests: Simplify RunCMake.{if,while} unbalanced parenthesis cases
  • Help: Document explicitly that ‘cxx_std_##’ features may not add a flag
  • Tests: Make RunCMake.CMP0125 robust to external filesystem content
  • BinUtils: Avoid llvm-mt because it is missing ‘mt’ features we use
  • gitlab-ci: Update Windows builds to MSVC 19.31 toolset
  • Tests: Fix testing CMAKE_CUDA_ARCHITECTURES=OFF with Clang
  • CMake 3.23.0-rc3

Craig Scott (4):

  • find_file: Fix blank line instead of framework path in debug output
  • Help: Improve wording and structure related to preset includes
  • Help: Reorganise FILE_SETS and related properties
  • Help: Update install() docs to better reflect preference for file sets

Fred Baksik (1):

  • GHS: Store full path of Integrity OS directory

Joker-Van (1):

  • KWSys: SystemInformation: Add Zhaoxin x86 processor kh40000

Kenneth Soerensen (1):

  • IAR: Fix detection of modern C++ version

Kyle Edwards (5):

  • target_sources(): Prohibit FILE_SET on custom targets
  • target_sources(): Enforce stricter requirements for FILE_SET name
  • target_sources(): Process multiple FILE_SET arguments per block
  • CMakePresets.json: Add ${fileDir} macro
  • Tests: Disable CMAKE_SYSTEM_PROGRAM_PATH in IgnorePrefixPath test

Michael Hirsch (1):

  • FindMatlab: Fix logic error when minimum version is not found

Peter Hill (1):

  • Ninja: Avoid preprocessing twice with explicit Fortran_PREPROCESS

Robert Maynard (2):

  • cmake: Correct regression in -B <dir> <src\_dir>
  • CUDA: Restore support for CMAKE_CUDA_ARCHITECTURES=OFF

friendlyanon (1):

  • Help: Add missing versionadded to *CROSSCOMPILING_EMULATOR
1 Like