CMake 3.28 Release Notes

Changes made since CMake 3.27 include the following.

New Features


  • C++ 20 named modules are now supported by Ninja Generators and Visual Studio Generators for VS 2022 and newer, in combination with the MSVC 14.34 toolset (provided with VS 17.4) and newer, LLVM/Clang 16.0 and newer, and GCC 14 (after the 2023-09-20 daily bump) and newer. See cmake-cxxmodules(7) for details.

  • HIP language code may now be compiled for NVIDIA GPUs using the NVIDIA CUDA Compiler (NVCC). See the CMAKE_HIP_PLATFORM variable.



  • cmake-presets(7) files now support schema version 8. It adds support for a $schema field.


  • Cray Clang-based compilers are now supported with compiler id CrayClang.

  • The OrangeC compiler is now supported with compiler id OrangeC.


  • The add_custom_command() and add_custom_target() commands gained a JOB_SERVER_AWARE option.

  • The cmake_host_system_information() command gained a MSYSTEM_PREFIX query for the installation prefix of a MSYS or MinGW development environment on Windows hosts.

  • The set_property() command TEST mode gained a DIRECTORY option to set properties on tests in other directories.

  • The set_tests_properties() command gained a DIRECTORY option to set properties on tests in other directories.

  • The get_property() command TEST mode gained a DIRECTORY option to get properties on tests in other directories.

  • The get_test_property() command gained a DIRECTORY option to get properties on tests in other directories.



  • On imported shared libraries, the IMPORTED_IMPLIB target property may now be used without IMPORTED_LOCATION. This can be used to represent a stub library whose location should not be added as a runtime search path to dependents that link it.

  • The IMPORTED_LOCATION property of a macOS framework may now be a path to the .framework folder itself.

  • The XCODE_EMBED_RESOURCES target property was added to tell the Xcode generator what targets to put in the Embed Resources build phase.


Generator Expressions


Deprecated and Removed Features

  • The exec_program() command, which has been deprecated since CMake 3.0, has been removed by policy CMP0153. Use the execute_process() command instead.

  • The Visual Studio 11 2012 generator has been removed.

  • The Visual Studio 12 2013 generator is now deprecated and will be removed in a future version of CMake.

  • The IOS_INSTALL_COMBINED target property and corresponding CMAKE_IOS_INSTALL_COMBINED variable have been deprecated. Their functionality does not make sense on Apple Silicon hosts.

  • The Xcode generator will now issue a fatal error if the Legacy Build System has been selected for Xcode 14 and newer. Those Xcode versions dropped support for the Legacy Build System and expect the project to be set-up for their current Build System.

Other Changes

  • Generated files, in targets using File Sets, are now considered private by default. Generated public headers must be specified using file sets. This allows Ninja Generators to produce more efficient build graphs. See policy CMP0154.

  • The find_library(), find_path(), and find_file() commands no longer search in installation prefixes derived from the PATH environment variable. This behavior was added in CMake 3.3 to support MSYS and MinGW (MSYSTEM) development environments on Windows, but it can search undesired prefixes that happen to be in the PATH for unrelated reasons. Users who keep some <prefix>/bin directories in the PATH just for their tools do not necessarily want any corresponding <prefix>/lib or <prefix>/include directories searched. The behavior was reverted for non-Windows platforms by CMake 3.6. Now it has been reverted on Windows platforms too.

    One may set the CMAKE_PREFIX_PATH environment variable with a semicolon-separated list of prefixes that are to be searched.

  • When using MinGW tools in a MSYSTEM environment on Windows, the $MSYSTEM_PREFIX/local and $MSYSTEM_PREFIX prefixes are now added to CMAKE_SYSTEM_PREFIX_PATH.

  • The precompiled Linux x86_64 binaries provided on now require GLIBC 2.17 or higher.


Changes made since CMake 3.28.0 include the following.

3.28.1, 3.28.2, 3.28.3

  • These versions made no changes to documented features or interfaces. Some implementation updates were made to support ecosystem changes and/or fix regressions.