<div dir="ltr">I am proud to announce the first CMake 3.24 release candidate.<br>  <a href="https://cmake.org/download/" target="_blank">https://cmake.org/download/<br></a><br>Documentation is available at:<br>  <a href="https://cmake.org/cmake/help/v3.24" target="_blank">https://cmake.org/cmake/help/v3.24<br></a><br>Release notes appear below and are also published at<br>  <a href="https://cmake.org/cmake/help/v3.24/release/3.24.html" target="_blank">https://cmake.org/cmake/help/v3.24/release/3.24.html<br></a><br>Some of the more significant changes in CMake 3.24 are:<br><div><br></div><div>* The "FetchContent" module and the "find_package()" command now<br>  support integration capabilities.<br><br>* The "LINK_LIBRARY" generator expression was added to manage how<br>  libraries are specified during the link step.<br><br>* The Visual Studio Generators now support "SYSTEM" headers when using<br>  VS 2019 Update 11 or later.<br><br>* "cmake(1)" gained the "--fresh" command-line option to remove any<br>  existing "CMakeCache.txt" file and associated "CMakeFiles/"<br>  directory, when configuring a build tree, thus starting a new<br>  configuration as if the build tree were freshly created.<br><br>* The "CMAKE_COMPILE_WARNING_AS_ERROR" variable and corresponding<br>  "COMPILE_WARNING_AS_ERROR" target property were added to enable<br>  compilation with a compiler-specific flag to treat warnings as<br>  errors, such as "-Werror".<br><br>* The "find_file()", "find_path()", "find_library()",<br>  "find_program()", and "find_package()" commands gained the<br>  "NO_CMAKE_INSTALL_PREFIX" option to control searching<br>  "CMAKE_INSTALL_PREFIX".<br><br>* The "find_file()", "find_path()", "find_library()",<br>  "find_program()", and "find_package()" commands gained the ability<br>  to specify which Windows Registry views must be queried.<br><br><br>CMake 3.24 Release Notes<br>************************<br><br>Changes made since CMake 3.23 include the following.<br><br><br>New Features<br>============<br><br><br>Presets<br>-------<br><br>* "cmake-presets(7)" files now support schema version "5".<br><br>* "cmake-presets(7)" files now support a "${pathListSep}" macro, which<br>  expands to ":" or ";" based on the platform.<br><br>* "cmake-presets(7)" files gained support for specifying a<br>  "testOutputTruncation" field in test presets, which specifies the<br>  truncation mode once the maximum test output size has been reached.<br><br><br>Generators<br>----------<br><br>* The "Green Hills MULTI" generator now generates build rules to re-<br>  run CMake if any CMake files are updated.<br><br>* The Visual Studio Generators now support "SYSTEM" headers when using<br>  VS 2019 Update 11 or later.<br><br><br>Command-Line<br>------------<br><br>* "cmake(1)" gained the "--fresh" command-line option to remove any<br>  existing "CMakeCache.txt" file and associated "CMakeFiles/"<br>  directory, when configuring a build tree, thus starting a new<br>  configuration as if the build tree were freshly created.<br><br>* "cmake(1)" gained the "--compile-no-warning-as-error" command-line<br>  option which causes the effects of the "COMPILE_WARNING_AS_ERROR"<br>  target property and "CMAKE_COMPILE_WARNING_AS_ERROR" variable to be<br>  ignored.<br><br>* The "cmake(1)" "--trace=json-v1" trace format gained fields<br>  "global_frame" and "line_end".<br><br>* The "cmake(1)" "-E" commands "cat" and "env" learned to respect a<br>  double dash ("--") argument that acts as a delimiter indicating the<br>  end of options. Any following arguments are treated as<br>  operands/positional arguments, even if they begin with a dash "-"<br>  character.<br><br>* The "cmake(1)" "-E tar" command gained the "--touch" option to keep<br>  the current local timestamp instead of extracting file timestamps<br>  from the archive.<br><br><br>Compilers<br>---------<br><br>* LLVM's flang Fortran compiler is now supported on some platforms,<br>  with compiler id "LLVMFlang".<br><br>* ADSP compiler support (SHARC and Blackfin) now covers both CCES and<br>  VDSP++ installations, with required configuration now done in the<br>  compiler module itself rather than the "Generic-ADSP" platform<br>  module.<br><br><br>Platforms<br>---------<br><br>* A dedicated "ADSP" platform has been added to replace the existing<br>  "Generic-ADSP" implementation. This features automatic detection of<br>  the latest CCES/VDSP++ install and compiler selection ("cc21k" vs.<br>  "ccblkfn") based off of the "CMAKE_SYSTEM_PROCESSOR" variable.<br><br><br>Commands<br>--------<br><br>* The "cmake_host_system_information()" command, on Windows, gained a<br>  "QUERY WINDOWS_REGISTRY" mode. See its Query Windows registry<br>  section.<br><br>* The "cmake_language()" command gained a new<br>  "SET_DEPENDENCY_PROVIDER" sub-command.  When a dependency provider<br>  is set, calls to "find_package()" and "FetchContent_MakeAvailable()"<br>  can be redirected through a custom command, which can choose to<br>  fulfill the request directly, modify how the request is processed,<br>  or leave it to be fulfilled by the built-in implementation.  See<br>  Dependency Providers.<br><br>* The "file(DOWNLOAD)" command gained options "RANGE_START" and<br>  "RANGE_END" to specify a range of bytes to download.  This can be<br>  useful for downloading parts of big binary files.<br><br>* The "find_file()", "find_path()", "find_library()",<br>  "find_program()", and "find_package()" commands gained the<br>  "NO_CMAKE_INSTALL_PREFIX" option to control searching<br>  "CMAKE_INSTALL_PREFIX".<br><br>* The "find_file()", "find_path()", "find_library()",<br>  "find_program()", and "find_package()" commands gained the ability<br>  to specify which Windows Registry views must be queried.<br><br>* The "find_package()" command gained a "GLOBAL" option that allows<br>  for the promotion of imported targets to global scope for the<br>  duration of the "find_package()" call.<br><br>* The "if()" command gained the capability to compare paths by using<br>  the "PATH_EQUAL" operator.  See policy "CMP0139".<br><br><br>Variables<br>---------<br><br>* The "CMAKE_COLOR_DIAGNOSTICS" variable was added to control color<br>  diagnostics generated by compilers.  This variable also controls<br>  color build system messages with Makefile Generators, replacing<br>  "CMAKE_COLOR_MAKEFILE".<br><br>  The "CMAKE_COLOR_DIAGNOSTICS" environment variable was added to set<br>  a default value for "CMAKE_COLOR_DIAGNOSTICS".<br><br>* The "CMAKE_COMPILE_WARNING_AS_ERROR" variable and corresponding<br>  "COMPILE_WARNING_AS_ERROR" target property were added to enable<br>  compilation with a compiler-specific flag to treat warnings as<br>  errors, such as "-Werror".<br><br>* The "CMAKE_CUDA_ARCHITECTURES" variable and associated<br>  "CUDA_ARCHITECTURES" target property now support the special<br>  "native" value to compile for the architectures(s) of the host's<br>  GPU(s).<br><br>* The "CMAKE_FIND_PACKAGE_TARGETS_GLOBAL" variable was added to toggle<br>  behavior of the "find_package()" command's new "GLOBAL" option.<br><br>* The "CMAKE_FIND_USE_INSTALL_PREFIX" variable was added to toggle<br>  behavior of the "find_file()", "find_library()", "find_path()",<br>  "find_package()", and "find_program()" commands' new<br>  "NO_CMAKE_INSTALL_PREFIX" option.<br><br>* The "CMAKE_PROJECT_TOP_LEVEL_INCLUDES" variable was added to allow<br>  injecting custom code at the site of the first "project()" call,<br>  after the host and target platform details have been determined.<br><br>* The "CMAKE_TRY_COMPILE_NO_PLATFORM_VARIABLES" variable was added to<br>  tell the "try_compile()" command not to pass any platform variables<br>  to the test project.<br><br>* The "CMAKE_VERIFY_INTERFACE_HEADER_SETS" variable and corresponding<br>  "VERIFY_INTERFACE_HEADER_SETS" target property were added to enable<br>  build rules that verify all headers in header sets can be used on<br>  their own.<br><br>* The "CMAKE_WATCOM_RUNTIME_LIBRARY" variable and<br>  "WATCOM_RUNTIME_LIBRARY" target property were introduced to select<br>  the runtime library used by compilers targeting the Watcom ABI. See<br>  policy "CMP0136".<br><br>* The "CMAKE_XCODE_XCCONFIG" variable and corresponding<br>  "XCODE_XCCONFIG" target property were added to tell the "Xcode"<br>  generator to handle "xcconfig" files.<br><br><br>Properties<br>----------<br><br>* The "INTERFACE_LINK_LIBRARIES_DIRECT" and<br>  "INTERFACE_LINK_LIBRARIES_DIRECT_EXCLUDE" target properties were<br>  added to express usage requirements affecting a consumer's direct<br>  link dependencies.<br><br>* The "INTERFACE_HEADER_SETS_TO_VERIFY" target property was added to<br>  specify which header sets should be verified by<br>  "VERIFY_INTERFACE_HEADER_SETS".<br><br>* The "LINK_LIBRARIES" target property now supports the<br>  "$<LINK_ONLY:...>" generator expression. See policy "CMP0131".<br><br>* The "VS_DOTNET_STARTUP_OBJECT" target property was added to tell<br>  Visual Studio Generators which startup class shall be used when the<br>  program or project is executed. This is necessary when more than one<br>  "static void Main(string[])" function signature is available in a<br>  managed .NET project.<br><br>* The "VS_NO_COMPILE_BATCHING" target property was added to tell<br>  Visual Studio Generators whether to disable compiler parallelism and<br>  call the compiler with one source file at a time.<br><br><br>Modules<br>-------<br><br>* The "ExternalProject" module "ExternalProject_Add()" command gained<br>  a new "DOWNLOAD_EXTRACT_TIMESTAMP" option for controlling whether<br>  the timestamps of extracted contents are set to match those in the<br>  archive when the "URL" download method is used. Policy "CMP0135" was<br>  added to enable the option by default.<br><br>* The "FetchContent" module and the "find_package()" command now<br>  support integration capabilities:<br><br>  * "FetchContent_MakeAvailable()" can now try to satisfy a dependency<br>    by calling "find_package()" first.  A new<br>    "FETCHCONTENT_TRY_FIND_PACKAGE_MODE" variable controls whether<br>    this is done by default for all dependencies, is opt-in per<br>    dependency, or is disabled entirely.<br><br>  * "find_package()" can be re-routed to call<br>    "FetchContent_MakeAvailable()" instead.  A new read-only<br>    "CMAKE_FIND_PACKAGE_REDIRECTS_DIR" variable points to a directory<br>    where config package files can be located to facilitate these re-<br>    routed calls.<br><br>* The "FindJNI" module now provides imported targets.<br><br>* The "FindMatlab" module "matlab_add_mex()" function gained a<br>  "NO_IMPLICIT_LINK_TO_MATLAB_LIBRARIES" option to disable automatic<br>  linking of MATLAB libraries.<br><br>* The "FindPkgConfig" module learned to find static libraries in<br>  addition to the default search for shared libraries.<br>  "pkg_check_modules()" gained a "STATIC_TARGET" option to make the<br>  imported target reference static libraries.<br><br>* The "FindZLIB" gained a new "ZLIB_USE_STATIC_LIBS" variable to<br>  search only for static libraries.<br><br><br>Generator Expressions<br>---------------------<br><br>* The "LINK_LIBRARY" generator expression was added to manage how<br>  libraries are specified during the link step. The<br>  "CMAKE_<LANG>_LINK_LIBRARY_USING_<FEATURE>" and<br>  "CMAKE_LINK_LIBRARY_USING_<FEATURE>" variables are used to define<br>  features usable by the "LINK_LIBRARY" generator expression.<br>  Moreover, the "LINK_LIBRARY_OVERRIDE" and<br>  "LINK_LIBRARY_OVERRIDE_<LIBRARY>" target properties are available to<br>  resolve incompatible features.<br><br>  The "LINK_LIBRARY" generator expression can link frameworks in<br>  various ways when targeting "Apple" platforms. The following<br>  features were added:<br><br>  * "FRAMEWORK"<br><br>  * "NEEDED_FRAMEWORK"<br><br>  * "REEXPORT_FRAMEWORK"<br><br>  * "WEAK_FRAMEWORK"<br><br>  The "LINK_LIBRARY" generator expression can link libraries in<br>  various ways when targeting "Apple" platforms. The following<br>  features were added:<br><br>  * "NEEDED_LIBRARY"<br><br>  * "REEXPORT_LIBRARY"<br><br>  * "WEAK_LIBRARY"<br><br>  The "LINK_LIBRARY" generator expression gained the feature<br>  "WHOLE_ARCHIVE" to force load of all members in a static library.<br>  This feature is supported on the following target platforms:<br><br>  * all "Apple" variants<br><br>  * "Linux"<br><br>  * all "BSD" variants<br><br>  * "SunOS"<br><br>  * "Windows"<br><br>  * "CYGWIN"<br><br>  * "MSYS"<br><br>* The "LINK_GROUP" generator expression was added to manage the<br>  grouping of libraries during the link step.  The<br>  "CMAKE_<LANG>_LINK_GROUP_USING_<FEATURE>" and<br>  "CMAKE_LINK_GROUP_USING_<FEATURE>" variables are used to define<br>  features usable with the "LINK_GROUP" generator expression. This<br>  release defines the "RESCAN" feature, which can be used to handle<br>  circular references among static libraries when using toolchains for<br>  Linux, BSD, SunOS and GNU toolchains for Windows.<br><br>* The "PATH" generator expression was added to manage paths.<br><br>* The "PATH_EQUAL" generator expression was added to manage path<br>  comparisons.<br><br>* The "TARGET_BUNDLE_DIR_NAME" generator expression was added to<br>  evaluate to the name of the bundle directory for a given bundle<br>  target.<br><br><br>CTest<br>-----<br><br>* "ctest(1)" gained a "--test-output-truncation" option (and<br>  corresponding "CTEST_CUSTOM_TEST_OUTPUT_TRUNCATION" variable) to<br>  specify the truncation mode once the maximum test output size has<br>  been reached. Possible values are "tail" (default), "middle" or<br>  "head".<br><br><br>CPack<br>-----<br><br>* The "CPack WIX Generator" gained a new variable,<br>  "CPACK_WIX_ARCHITECTURE", to specify the installer architecture in<br>  order to support computers running Windows for ARM.<br><br>* CPack now supports the "CPACK_THREADS" option for "zstd" compression<br>  when compiled with libarchive 3.6 or higher.  It is supported by<br>  official CMake binaries available on <a href="http://cmake.org">cmake.org</a>.<br><br><br>Deprecated and Removed Features<br>===============================<br><br>* The "CPack" module no longer enables the SLA by default in the<br>  "CPack DragNDrop Generator".  See policy "CMP0133" and the<br>  "CPACK_DMG_SLA_USE_RESOURCE_FILE_LICENSE" variable.<br><br>* The deprecated "CPack PackageMaker Generator" has been removed.<br><br>* The "FindGLUT" module no longer provides the undocumented<br>  "GLUT_LIBRARY" and "GLUT_INCLUDE_PATH" result variables.<br><br><br>Other Changes<br>=============<br><br>* CMake no longer sets environment variables like "CC", "CXX", etc.<br>  when enabling the corresponding language during the first CMake run<br>  in a build directory.  See policy "CMP0132".<br><br>* The "CheckIPOSupported" module "check_ipo_supported()" command now<br>  uses the caller's "CMAKE_<LANG>_FLAGS" and<br>  "CMAKE_<LANG>_FLAGS_<CONFIG>" values. See policy "CMP0138".<br><br>* The "MSYS Makefiles" and "MinGW Makefiles" generators, when a<br>  compiler is not explicitly specified, now select the first compiler<br>  (of any name) found in directories listed by the "PATH" environment<br>  variable.<br><br>* The "try_compile()" command whole-project signature now propagates<br>  platform variables.  See policy "CMP0137".<br><br>* The "while()" command now diagnoses errors during condition<br>  evaluation.  See policy "CMP0130".<br><br>* The precompiled macOS binaries provided on <a href="http://cmake.org">cmake.org</a> no longer<br>  attach a SLA to the ".dmg" packages.  This was removed because macOS<br>  12 deprecated the tools used to attach ".dmg" resources.<br></div></div>