<div dir="ltr">I am proud to announce the fourth CMake 3.28 release candidate.<br>  <a href="https://cmake.org/download/" target="_blank">https://cmake.org/download/</a><br><br>Documentation is available at:<br>  <a href="https://cmake.org/cmake/help/v3.28" target="_blank">https://cmake.org/cmake/help/v3.28</a><br><br>Release notes appear below and are also published at<br>  <a href="https://cmake.org/cmake/help/v3.28/release/3.28.html" target="_blank">https://cmake.org/cmake/help/v3.28/release/3.28.html</a><br><br>Some of the more significant changes in CMake 3.28 are:<br><br>* C++ 20 named modules are now supported by Ninja Generators and<br>  Visual Studio Generators for VS 2022 and newer, in combination with<br>  the MSVC 14.34 toolset (provided with VS 17.4) and newer, LLVM/Clang<br>  16.0 and newer, and GCC 14 (after the 2023-09-20 daily bump) and<br>  newer. See "cmake-cxxmodules(7)" for details.<br><br>* "HIP" language code may now be compiled for NVIDIA GPUs using the<br>  NVIDIA CUDA Compiler (NVCC). See the "CMAKE_HIP_PLATFORM" variable.<br><br>* On Apple platforms, ".xcframework" folders are now supported.<br><br>* The "exec_program()" command, which has been deprecated since CMake<br>  3.0, has been removed by policy "CMP0153". Use the<br>  "execute_process()" command instead.<br><br>* Generated files, in targets using File Sets, are now considered<br>  private by default.  Generated public headers must be specified<br>  using file sets.  This allows Ninja Generators to produce more<br>  efficient build graphs.  See policy "CMP0154".<br><br>* The "find_library()", "find_path()", and "find_file()" commands no<br>  longer search in installation prefixes derived from the "PATH"<br>  environment variable.  This behavior was added in CMake 3.3 to<br>  support MSYS and MinGW ("MSYSTEM") development environments on<br>  Windows, but it can search undesired prefixes that happen to be in<br>  the "PATH" for unrelated reasons.  Users who keep some<br>  "<prefix>/bin" directories in the "PATH" just for their tools do not<br>  necessarily want any corresponding "<prefix>/lib" or<br>  "<prefix>/include" directories searched. The behavior was reverted<br>  for non-Windows platforms by CMake 3.6. Now it has been reverted on<br>  Windows platforms too.<br><br><br>CMake 3.28 Release Notes<br>************************<br><br>Changes made since CMake 3.27 include the following.<br><br><br>New Features<br>============<br><br><br>Languages<br>---------<br><br>* C++ 20 named modules are now supported by Ninja Generators and<br>  Visual Studio Generators for VS 2022 and newer, in combination with<br>  the MSVC 14.34 toolset (provided with VS 17.4) and newer, LLVM/Clang<br>  16.0 and newer, and GCC 14 (after the 2023-09-20 daily bump) and<br>  newer. See "cmake-cxxmodules(7)" for details.<br><br>* "HIP" language code may now be compiled for NVIDIA GPUs using the<br>  NVIDIA CUDA Compiler (NVCC). See the "CMAKE_HIP_PLATFORM" variable.<br><br><br>Platforms<br>---------<br><br>* On Apple platforms, ".xcframework" folders are now supported:<br><br>  * The "find_library()" command now finds ".xcframework" folders.<br><br>  * The "target_link_libraries()" command now supports linking against<br>    a ".xcframework" folder.<br><br>  * The "IMPORTED_LOCATION" target property of an imported library<br>    target may now be the path to a ".xcframework" folder.<br><br>* Apple visionOS and its "xros" and "xrsimulator" SDKs are now<br>  supported. Compiling for Apple visionOS can be requested by setting<br>  "CMAKE_SYSTEM_NAME" to "visionOS". See Cross Compiling for iOS,<br>  tvOS, visionOS, or watchOS for more information.<br><br><br>Presets<br>-------<br><br>* "cmake-presets(7)" files now support schema version "8". It adds<br>  support for a "$schema" field.<br><br><br>Compilers<br>---------<br><br>* Cray Clang-based compilers are now supported with "compiler id"<br>  "CrayClang".<br><br>* The OrangeC compiler is now supported with "compiler id" "OrangeC".<br><br><br>Commands<br>--------<br><br>* The "add_custom_command()" and "add_custom_target()" commands gained<br>  a "JOB_SERVER_AWARE" option.<br><br>* The "cmake_host_system_information()" command gained a<br>  "MSYSTEM_PREFIX" query for the installation prefix of a MSYS or<br>  MinGW development environment on Windows hosts.<br><br>* The "set_property()" command "TEST" mode gained a "DIRECTORY" option<br>  to set properties on tests in other directories.<br><br>* The "set_tests_properties()" command gained a "DIRECTORY" option to<br>  set properties on tests in other directories.<br><br>* The "get_property()" command "TEST" mode gained a "DIRECTORY" option<br>  to get properties on tests in other directories.<br><br>* The "get_test_property()" command gained a "DIRECTORY" option to get<br>  properties on tests in other directories.<br><br><br>Variables<br>---------<br><br>* The "CMAKE_CROSSCOMPILING_EMULATOR" environment variable was added<br>  to initialize the "CMAKE_CROSSCOMPILING_EMULATOR" cache variable.<br><br>* The "CMAKE_HIP_PLATFORM" variable was added to specify the GPU<br>  platform for which HIP language sources are to be compiled ("amd" or<br>  "nvidia").<br><br><br>Properties<br>----------<br><br>* On imported shared libraries, the "IMPORTED_IMPLIB" target property<br>  may now be used without "IMPORTED_LOCATION". This can be used to<br>  represent a stub library whose location should not be added as a<br>  runtime search path to dependents that link it.<br><br>* The "IMPORTED_LOCATION" property of a macOS framework may now be a<br>  path to the ".framework" folder itself.<br><br>* The "XCODE_EMBED_RESOURCES" target property was added to tell the<br>  "Xcode" generator what targets to put in the "Embed Resources" build<br>  phase.<br><br><br>Modules<br>-------<br><br>* The "ExternalProject" module now includes the<br>  "BUILD_JOB_SERVER_AWARE" option for the "ExternalProject_Add()"<br>  command. This option enables the integration of the GNU Make job<br>  server when using an explicit "BUILD_COMMAND" with certain Makefile<br>  Generators. Additionally, the "ExternalProject_Add_Step()" command<br>  has been updated to support the new "JOB_SERVER_AWARE" option.<br><br>* The "ExternalProject" module now declares "BYPRODUCTS" for the<br>  downloaded file for generated "download" steps. Previously, if<br>  multiple external projects downloaded to the same file, hash<br>  verification could fail. Now, when using the Ninja Generators, this<br>  scenario is detected and Ninja will raise an error stating that<br>  multiple rules generate the same file.<br><br>* The "FetchContent" module's "FetchContent_Declare()" command gained<br>  an "EXCLUDE_FROM_ALL" option, which propagates through to the<br>  "add_subdirectory()" call made by "FetchContent_MakeAvailable()" for<br>  the dependency.<br><br>* The "FindCURL" module gained a "CURL_USE_STATIC_LIBS" hint to select<br>  static libraries.<br><br>* The "FindEXPAT" module gained an "EXPAT_USE_STATIC_LIBS" hint to<br>  select static libraries.<br><br>* The "FindPkgConfig" module "pkg_get_variable()" command gained a<br>  "DEFINE_VARIABLES" option to pass variables to "pkg-config".<br><br><br>Generator Expressions<br>---------------------<br><br>* The "generator expressions" "$<IF:...>", "$<AND:...>", and<br>  "$<OR:...>" short-circuit to avoid unnecessary evaluation of<br>  parameters.<br><br><br>CTest<br>-----<br><br>* CTest may now take a dynamically-generated resource spec file, which<br>  can be specified by the "GENERATED_RESOURCE_SPEC_FILE" test<br>  property.<br><br><br>Deprecated and Removed Features<br>===============================<br><br>* The "exec_program()" command, which has been deprecated since CMake<br>  3.0, has been removed by policy "CMP0153". Use the<br>  "execute_process()" command instead.<br><br>* The "Visual Studio 11 2012" generator has been removed.<br><br>* The "Visual Studio 12 2013" generator is now deprecated and will be<br>  removed in a future version of CMake.<br><br>* The "IOS_INSTALL_COMBINED" target property and corresponding<br>  "CMAKE_IOS_INSTALL_COMBINED" variable have been deprecated. Their<br>  functionality does not make sense on Apple Silicon hosts.<br><br>* The "Xcode" generator will now issue a fatal error if the Legacy<br>  Build System has been selected for Xcode 14 and newer. Those Xcode<br>  versions dropped support for the Legacy Build System and expect the<br>  project to be set-up for their current Build System.<br><br><br>Other Changes<br>=============<br><br>* Generated files, in targets using File Sets, are now considered<br>  private by default.  Generated public headers must be specified<br>  using file sets.  This allows Ninja Generators to produce more<br>  efficient build graphs.  See policy "CMP0154".<br><br>* The "find_library()", "find_path()", and "find_file()" commands no<br>  longer search in installation prefixes derived from the "PATH"<br>  environment variable.  This behavior was added in CMake 3.3 to<br>  support MSYS and MinGW ("MSYSTEM") development environments on<br>  Windows, but it can search undesired prefixes that happen to be in<br>  the "PATH" for unrelated reasons.  Users who keep some<br>  "<prefix>/bin" directories in the "PATH" just for their tools do not<br>  necessarily want any corresponding "<prefix>/lib" or<br>  "<prefix>/include" directories searched. The behavior was reverted<br>  for non-Windows platforms by CMake 3.6. Now it has been reverted on<br>  Windows platforms too.<br><br>  One may set the "CMAKE_PREFIX_PATH" environment variable with a<br>  semicolon-separated list of prefixes that are to be searched.<br><br>* When using MinGW tools in a "MSYSTEM" environment on Windows, the<br>  "$MSYSTEM_PREFIX/local" and "$MSYSTEM_PREFIX" prefixes are now added<br>  to "CMAKE_SYSTEM_PREFIX_PATH".<br><br>* The precompiled Linux "x86_64" binaries provided on <a href="http://cmake.org/" target="_blank">cmake.org</a> now<br>  require GLIBC 2.17 or higher.<br><br>----------------------------------------------------------------------------<br>Changes made since CMake 3.28.0-rc3:<br><br>André Apitzsch (1):<br>  FindProtobuf: Fix protoc include path regression<br><br>Ben Boeckel (13):<br>  FindFreeType: consider `IMPLIB`-using platforms<br>  Tests/ObjectLibrary: fix comment<br>  cmComputeLinkDepends: also copy the target from object link items<br>  cmComputeLinkInformation: skip over linking to items for object purposes<br>  Tests/CXXModules: test forced rsp files with ninja<br>  FindFreeType: handle config-specific `LOCATION` settings as well<br>  FindFreeType: insert Freetype's location to the start<br>  Fortran: Restore support for TARGET_OBJECTS providing modules<br>  FindFreeType: also set `FREETYPE_FOUND`<br>  CMP0155: ignore scanning for sources if no scanner is available<br>  cmGlobalGenerator: give context about module queries<br>  ci: generate annotation reports<br>  gitlab-ci: pull annotations for CDash from the jobs<br><br>Brad King (5):<br>  GetPrerequisites: Revert "Ignore relative paths printed by ldd"<br>  CMakeParseImplicitLinkInfo: Ignore MSVC link /implib: flag<br>  CMakeNVCCParseImplicitInfo: Recognize link.exe line in CUDA VS integration<br>  CUDA: Parse NVCC implicit compile/link information in Visua Studio generators<br>  CMake 3.28.0-rc4<br><br>Cristian Adam (1):<br>  ctest: Allow colored output on Windows if CLICOLOR_FORCE is set to 1<br><br>Kyle Edwards (3):<br>  cmState::AddDisallowedCommand(): Allow additional warning info<br>  CMP0153: Add suggestion to use execute_process()<br>  cmSystemTools::RunSingleCommand(): Pass stdin to child process<br></div>