CMake 3.20.0-rc3 is ready for testing

I am proud to announce the third CMake 3.20 release candidate.

Documentation is available at:

Release notes appear below and are also published at

Some of the more significant changes in CMake 3.20 are:

  • “cmake-presets(7)” gained support for build and test presets.
  • C++23 compiler modes may now be specified via the “CXX_STANDARD”,
    “CUDA_STANDARD”, or “OBJCXX_STANDARD” target properties, or via the
    “Compile Features” functionality’s “cxx_std_23” meta-feature.
  • The NVIDIA HPC SDK compilers are now supported with compiler id
  • CMake’s support for Cross Compiling for Android is now merged with
    the Android NDK’s toolchain file. They now have similar behavior,
    though some variable names differ.
  • The “cmake-file-api(7)” gained a new “toolchains” object kind that
    describes the compiler used for each enabled language.
  • “add_custom_command()” and “add_custom_target()” now support
    “generator expressions” in their “OUTPUT” and “BYPRODUCTS” options.

    Their “COMMAND”, “WORKING_DIRECTORY”, and “DEPENDS” options gained
    support for new generator expressions “$<COMMAND_CONFIG:…>” and
    “$<OUTPUT_CONFIG:…>” that control cross-config handling when using
    the “Ninja Multi-Config” generator.

  • The “cmake_path()” command was added for operations on filesystem
  • The “target_sources()” command now supports targets created by the
    “add_custom_target()” command.
  • The “ExternalProject” module “ExternalProject_Add()” function gained
    a “CONFIGURE_HANDLED_BY_BUILD” option. This can be used to make
    subsequent runs of the configure step be triggered by the build step
    when an external project dependency rebuilds instead of always re-
    running the configure step in such cases.
  • “ctest(1)” gained a “–test-dir” option to specify the directory in
    which to look for tests.
  • The “cmake-server(7)” mode has been removed. Clients should use the
    “cmake-file-api(7)” instead.
  • The “WriteCompilerDetectionHeader” module has been deprecated via
    policy “CMP0120”. Projects should be ported away from it.
  • The “AddFileDependencies” module is deprecated. Port projects to use
    “set_property()” directly.

Questions or comments are always welcome!