<div dir="ltr">I am proud to announce the third CMake 3.21 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.21" target="_blank">https://cmake.org/cmake/help/v3.21</a><br><br>Release notes appear below and are also published at<br>  <a href="https://cmake.org/cmake/help/v3.21/release/3.21.html" target="_blank">https://cmake.org/cmake/help/v3.21/release/3.21.html</a><br><br>Some of the more significant changes in CMake 3.21 are:<br><br>* CMake learned to support "HIP" as a first-class language that can be<br>  enabled via the "project()" and "enable_language()" commands.<br><br>* The "Visual Studio 17 2022" generator was added.  This is<br>  experimental and based on "Visual Studio 2022 Preview 1.1" because<br>  this version of VS has not been released.<br><br>* The Makefile Generators and the "Ninja" generator learned to add<br>  linker launcher tools along with the linker for "C", "CXX", "OBJC",<br>  and "OBJCXX" languages. See the "CMAKE_<LANG>_LINKER_LAUNCHER"<br>  variable and "<LANG>_LINKER_LAUNCHER" target property for details.<br><br>* "C_STANDARD", "OBJC_STANDARD", and the "Compile Features"<br>  functionality gained support for C17 and C23.<br><br>* "cmake(1)" gained the "--toolchain <path/to/file>" command-line<br>  option to specify a toolchain file.<br><br>* Messages printed to a terminal now may be colored by message type.<br><br>* The Fujitsu compiler is now supported using compiler id "Fujitsu" in<br>  traditional ("Trad") mode, and compiler id "FujitsuClang" in "Clang"<br>  mode.<br><br>* The "add_custom_command()" command "DEPFILE" option may now use<br>  "generator expressions", is now supported by Visual Studio Generators<br>  for VS 2012 and above, and is now supported by the "Xcode" generator.<br><br>* The "add_custom_command(TARGET)" command (for Build Events) gained<br>  support for resolving target-dependent generator expressions.<br><br>* The "install(TARGETS)" command gained new "RUNTIME_DEPENDENCIES" and<br>  "RUNTIME_DEPENDENCY_SET" arguments, which can be used to install<br>  runtime dependencies using "file(GET_RUNTIME_DEPENDENCIES)".<br><br>* A new "TARGET_RUNTIME_DLLS" generator expression was added.<br><br>* "ctest(1)" gained a "--output-junit" option to write test results to<br>  a JUnit XML file.<br><br>* The "ctest_build()" command gained a "PARALLEL_LEVEL" option.<br><br>* "ARMClang" cpu/arch compile and link flags are no longer added<br>  automatically based on the "CMAKE_SYSTEM_PROCESSOR" variable or the<br>  undocumented "CMAKE_SYSTEM_ARCH" variable. They must be specified<br>  explicitly.  See policy "CMP0123".<br><br>* The "foreach()" command now isolates loop variables in the loop<br>  scope. See policy "CMP0124" for details.<br><br><br>CMake 3.21 Release Notes<br>************************<br><br>Changes made since CMake 3.20 include the following.<br><br><br>New Features<br>============<br><br><br>Presets<br>-------<br><br>* "cmake-presets(7)" gained support for specifying the install prefix<br>  in a configure preset.<br><br>* "cmake-presets(7)" gained support for conditional enabling of<br>  presets.<br><br>* "cmake-presets(7)" gained support for a "${hostSystemName}" macro.<br><br>* "cmake-presets(7)" gained support for omitting the "generator" and<br>  "binaryDir" fields.<br><br><br>Generators<br>----------<br><br>* The Makefile Generators and the "Ninja" generator learned to add<br>  linker launcher tools along with the linker for "C", "CXX", "OBJC",<br>  and "OBJCXX" languages. See the "CMAKE_<LANG>_LINKER_LAUNCHER"<br>  variable and "<LANG>_LINKER_LAUNCHER" target property for details.<br><br>* The "Visual Studio 17 2022" generator was added.  This is<br>  experimental and based on "Visual Studio 2022 Preview 1.1" because<br>  this version of VS has not been released.<br><br><br>Languages<br>---------<br><br>* CMake learned to support "HIP" as a first-class language that can be<br>  enabled via the "project()" and "enable_language()" commands.<br><br>* "C_STANDARD", "OBJC_STANDARD", and the "Compile Features"<br>  functionality gained support for C17 and C23.<br><br>* Source file extensions ".ixx" and ".cppm" are now treated as C++.<br><br><br>Command-Line<br>------------<br><br>* "cmake(1)" gained the "--install-prefix <dir>" command-line option<br>  to specify the location of the install prefix.<br><br>* "cmake(1)" gained the "--toolchain <path/to/file>" command-line<br>  option to specify a toolchain file.<br><br>* "cmake(1)" "-E capabilities" output, for some generators, may now<br>  contain a "supportedPlatforms" field listing platforms known to be<br>  supported in "CMAKE_GENERATOR_PLATFORM".<br><br>* Messages printed to a terminal now may be colored by message type.<br><br><br>Compilers<br>---------<br><br>* The Fujitsu compiler is now supported using compiler id "Fujitsu" in<br>  traditional ("Trad") mode, and compiler id "FujitsuClang" in "Clang"<br>  mode.<br><br><br>Platforms<br>---------<br><br>* CMake now supports the MSYS runtime environment, much like CYGWIN.<br><br><br>File-Based API<br>--------------<br><br>* The "cmake-file-api(7)" "codemodel" version 2 "version" field has<br>  been updated to 2.3.<br><br>* The "cmake-file-api(7)" "codemodel" version 2 gained a new<br>  "directory" object containing directory-level information. This<br>  includes a list of installers generated by the "install()" command.<br><br><br>Commands<br>--------<br><br>* The "add_custom_command()" command "DEPFILE" option may now use<br>  "generator expressions", is now supported by Visual Studio Generators<br>  for VS 2012 and above, and is now supported by the "Xcode" generator.<br><br>* The "add_custom_command(TARGET)" command (for Build Events) gained<br>  support for resolving target-dependent generator expressions.<br><br>* The "build_command()" command gained a "PARALLEL_LEVEL" option.<br><br>* The "file(COPY_FILE)" command was added to copy a single file.<br><br>* The "file(GET_RUNTIME_DEPENDENCIES)" command gained new<br>  "POST_INCLUDE_FILES" and "POST_EXCLUDE_FILES" arguments.<br><br>* The "file(REAL_PATH)" command gained the option "EXPAND_TILDE" to<br>  replace any leading tilde with the path to the user's home<br>  directory.<br><br>* The "file(RENAME)" command learned to optionally capture failure in<br>  a result variable.  It also gained a "NO_REPLACE" option to fail if<br>  the destination exists.<br><br>* The "install()" command gained a new "IMPORTED_RUNTIME_ARTIFACTS"<br>  mode, which can be used to install the runtime artifacts of imported<br>  targets.<br><br>* The "install()" command gained a new "RUNTIME_DEPENDENCY_SET" mode,<br>  which can be used to install runtime dependencies using<br>  "file(GET_RUNTIME_DEPENDENCIES)".<br><br>* The "install(TARGETS)" command gained new "RUNTIME_DEPENDENCIES" and<br>  "RUNTIME_DEPENDENCY_SET" arguments, which can be used to install<br>  runtime dependencies using "file(GET_RUNTIME_DEPENDENCIES)".<br><br>* The "install(SCRIPT|CODE)" command supports a new option<br>  "ALL_COMPONENTS" which allows the corresponding code to run for<br>  every component of a per component installation.<br><br>* The "project()" command now sets variables "PROJECT_IS_TOP_LEVEL"<br>  and "<PROJECT-NAME>_IS_TOP_LEVEL" to indicate whether it was called<br>  in a top-level "CMakeLists.txt" file.<br><br><br>Variables<br>---------<br><br>* The "CMAKE_TOOLCHAIN_FILE" environment variable was added to provide<br>  a default value for the "CMAKE_TOOLCHAIN_FILE" variable.<br><br><br>Properties<br>----------<br><br>* The "IMPORTED_TARGETS" directory property was added to get a list of<br>  Imported Targets created in the current directory.<br><br>* The "XCODE_EMBED_APP_EXTENSIONS" target property was added to tell<br>  the "Xcode" generator to embed app extensions such as iMessage<br>  sticker packs. Aspects of the embedding can be customized with the<br>  "XCODE_EMBED_APP_EXTENSIONS_PATH",<br>  "XCODE_EMBED_APP_EXTENSIONS_CODE_SIGN_ON_COPY" and<br>  "XCODE_EMBED_APP_EXTENSIONS_REMOVE_HEADERS_ON_COPY" properties.<br><br><br>Modules<br>-------<br><br>* The "FindBLAS" and "FindLAPACK" modules learned to support the<br>  serial "Fujitsu_SSL2" and parallel "Fujitsu_SSL2BLAMP" libraries.<br><br>* The "FindDevIL" module now provides imported targets.<br><br>* The "FindIconv" module now has version support.<br><br>* The "FindIntl" module now has version support.<br><br>* The "FindMPI" module learned to support "Fujitsu" and "FujitsuClang"<br>  in both host and cross compiling modes.<br><br>* The "FindMsys" module was added to find MSYS installations. Like<br>  "FindCygwin", it is used automatically by some other find modules to<br>  locate UNIX-style tools on Windows.<br><br>* The "FindOpenMP" module learned to support "Fujitsu" and<br>  "FujitsuClang".<br><br>* The "FindVulkan" module gained imported targets "Vulkan::Headers"<br>  and "Vulkan::glslangValidator".<br><br>* The "UseJava" module command "add_jar" gained a "RESOURCES" option<br>  to allow explicit naming of resources with non-optional namespace.<br><br>* The "UseSWIG" module use now standard library naming conventions for<br>  the "CSharp" language. See policy "CMP0122".<br><br>* The "UseSWIG" module now supports using the "swig" tool to generate<br>  implicit dependencies with the "Xcode" generator.<br><br><br>Generator Expressions<br>---------------------<br><br>* A new "TARGET_RUNTIME_DLLS" generator expression was added.<br><br><br>CTest<br>-----<br><br>* "ctest(1)" gained documentation for its ability to capture<br>  Additional Test Measurements.<br><br>* "ctest(1)" learned to recognize files attached to a test at run<br>  time. Previously it was only possible to attach files to tests at<br>  configure time by using the "ATTACHED_FILES" or<br>  "ATTACHED_FILES_ON_FAIL" test properties. See Additional Test<br>  Measurements for more information.<br><br>* "ctest(1)" gained a "--output-junit" option to write test results to<br>  a JUnit XML file.<br><br>* The "ctest_build()" command gained a "PARALLEL_LEVEL" option.<br><br><br>CPack<br>-----<br><br>* The "CPack DragNDrop Generator" gained option "CPACK_DMG_FILESYSTEM"<br>  to control the ".dmg" filesystem.<br><br>* The "CPack IFW Generator" now supports hyphens in names given to<br>  "cpack_ifw_configure_component()" or<br>  "cpack_ifw_configure_component_group()" as "DEPENDS" or<br>  "DEPENDENCIES" arguments.  This requires QtIFW 3.1 or later.<br><br>* The "CPack NSIS Generator" gained a new "CPACK_NSIS_EXECUTABLE"<br>  variable to specify the "makensis" executable to use instead of the<br>  default one.<br><br>* The "CPACK_CUSTOM_INSTALL_VARIABLES" variable was added to set<br>  variables in "cmake_install.cmake" script invocations made by CPack.<br><br><br>Deprecated and Removed Features<br>===============================<br><br>* Undocumented "CMAKE_SYSTEM_NAME" version-stripping behavior has been<br>  removed entirely. If it is set by a "-D" flag or by a "toolchain<br>  file", it is left unaltered, even if it still contains a version<br>  number. Similar "CMAKE_HOST_SYSTEM_NAME" version-stripping behavior,<br>  also undocumented, has been moved earlier, before "project()" or<br>  "enable_language()" is called.<br><br>* "ARMClang" cpu/arch compile and link flags are no longer added<br>  automatically based on the "CMAKE_SYSTEM_PROCESSOR" variable or the<br>  undocumented "CMAKE_SYSTEM_ARCH" variable. They must be specified<br>  explicitly.  See policy "CMP0123".<br><br><br>Other Changes<br>=============<br><br>* The "find_file()", "find_path()", "find_program()", and<br>  "find_library()" commands handle cache variables in the same way<br>  regardless how they are defined. See policy "CMP0125" for details.<br><br>* The "find_file()", "find_path()", "find_program()", and<br>  "find_library()" commands gained the option "NO_CACHE" to store find<br>  result in normal variable.<br><br>* The "foreach()" command now isolates loop variables in the loop<br>  scope. See policy "CMP0124" for details.<br><br>* The "list()" command's "GET", "INSERT", "SUBLIST", and "REMOVE_AT"<br>  subcommands now error with invalid (i.e., non-integer) values are<br>  given as any of their index arguments based on the setting of policy<br>  "CMP0121".<br><br>* The "set(CACHE)" command no longer removes a normal variable of the<br>  same name, if any. See policy "CMP0126".<br><br>* "target_link_libraries()" calls referencing object libraries via the<br>  "TARGET_OBJECTS" generator expression now place the object files<br>  before all libraries on the link line, regardless of their specified<br>  order.  See documentation on Linking Object Libraries via<br>  $<TARGET_OBJECTS> for details.<br><br>* The Ninja Generators now pass source files and include directories<br>  to the compiler using absolute paths.  This makes diagnostic<br>  messages and debug symbols more consistent, and matches the Makefile<br>  Generators.<br><br>* The "NMake Makefiles" generator now encodes the generated makefiles<br>  as UTF-8 with a BOM when using "nmake" from VS 9 or above.<br><br>* The Visual Studio Generators for VS 2010 and above now place per-<br>  source preprocessor definitions after target-wide preprocssor<br>  definitions.  This makes VS consistent with the Ninja Generators and<br>  the Makefile Generators.<br><br>* The precompiled binaries provided on <a href="http://cmake.org" target="_blank">cmake.org</a> now support "liblzma"<br>  multi-threading.  See the "CPACK_THREADS" and<br>  "CPACK_ARCHIVE_THREADS" variables.<br><br><br>----------------------------------------------------------------------------<br>Changes made since CMake 3.21.0-rc2:<br><br>Ben Boeckel (2):<br>  ci: update to 3.21.0-rc2 for CI usage<br>  gitlab-ci: upload JUnit reports for builds<br><br>Brad King (9):<br>  Help: Document VS generator support for Intel Fortran<br>  DetermineCompiler: Restore identification of MSVC with no INCLUDE or LIB<br>  Tests: Fix newline matching in several RunCMake.* cases<br>  gitlab-ci: Rename CI config variable to avoid conflict with CMAKE_BUILD_TYPE<br>  IntelLLVM: Fix C/C++ standard level flags on Windows<br>  Help: Document when OBJC_STANDARD values as definition list<br>  Help: Document when OBJCXX_STANDARD values were added<br>  Help: Document when CUDA_STANDARD values were added<br>  CMake 3.21.0-rc3<br><br>Craig Scott (3):<br>  Help: Add missing versionadded 3.21 for file(RENAME) options<br>  Help: Tighten install(SCRIPT) wording for ALL_COMPONENTS option<br>  Help: Improve readability and accuracy of runtime deps-related content<br><br>Gregor Jasny (1):<br>  Xcode: Ignore deprecated build system<br><br>Jean-Marc Hengen (1):<br>  IAR: Use placeholders in linker and archiver rules<br><br>Kyle Edwards (1):<br>  CMakePresets.json: Make --list-presets show presets with no generator<br><br>Marc Chevrier (1):<br>  Makefiles: Normalize compiler-generated depfile paths<br><br>Michael Hirsch (3):<br>  Help: Note C_STANDARD values added in CMake 3.21<br>  Help: Note CXX_STANDARD values added vs. CMake version<br>  Help: Note PROJECT_IS_TOP_LEVEL behavior w.r.t. ExternalProject<br><br>Robert Maynard (3):<br>  Correct CUDAToolkit_VERSION_MINOR variable name typo<br>  FindCUDAToolkit: Properly document the version support<br>  Check*CompilerFlag: Do not set result as a normal variable too<br></div>