CMake 3.27.0-rc2 is ready for testing

I am proud to announce the second* CMake 3.27 release candidate.
https://cmake.org/download/

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

*Note: The first release candidate, 3.27.0-rc1, was released but not announced
due to regressions discovered prior to the announcement process.

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 “_ROOT” CMake variables and upper-case
    “_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 “_CLANG_TIDY”, “_CPPCHECK”, “_CPPLINT”, and
    “_INCLUDE_WHAT_YOU_USE”, target properties now support
    “generator expressions”.

  • The “_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.

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

Ben Boeckel (1):

  • Makefiles: quote $(COLOR) expansions

Björn Esser (1):

  • bootstrap: Add --(no-)system-cppdap configuration switch

Brad King (2):

  • Modules: Restore unnecessary inclusions for compatibility
  • CMake 3.27.0-rc2

Marc Chevrier (1):

  • add_test: Restore support for empty test arguments
1 Like

The new generator expression TARGET_RUNTIME_DLL_DIRS might be worth mentioning.
Maybe also that the Visual Studio generators now list the cmake files under the ZERO_CHECK target.

That was added by CMake MR 8247, which forgot to add a release note. CMake MR 8558 adds it.

That was added by CMake MR 8260. I consider ZERO_CHECK to be an implementation detail. It is not mentioned in the VS generator documentation at all, so there is no place for a release note to point. CMake Issue 22264 requests more documentation of the builtin targets.