<div dir="ltr">I am proud to announce the first CMake 4.0 release candidate.<br>  <a href="https://cmake.org/download/">https://cmake.org/download/</a><br><br>Documentation is available at:<br>  <a href="https://cmake.org/cmake/help/v4.0">https://cmake.org/cmake/help/v4.0</a><br><br>Release notes appear below and are also published at<br>  <a href="https://cmake.org/cmake/help/v4.0/release/4.0.html">https://cmake.org/cmake/help/v4.0/release/4.0.html</a><br><br>Release milestone is available at:<br>  <a href="https://gitlab.kitware.com/cmake/cmake/-/milestones/160">https://gitlab.kitware.com/cmake/cmake/-/milestones/160</a><br><br>Some of the most significant changes in CMake 4.0 are:<br><br>* The "CMAKE_POLICY_VERSION_MINIMUM" variable was added to help<br>  packagers and end users try to configure existing projects that have<br>  not been updated to work with supported CMake versions.<br><br>* The "$<PATH>" generator expression gained the "NATIVE_PATH"<br>  operation to convert a CMake path into a native one.<br><br>* Compatibility with versions of CMake older than 3.5 has been<br>  removed. Calls to "cmake_minimum_required()" or "cmake_policy()"<br>  that set the policy version to an older value now issue an error.<br>  Note that calls to those commands can still support older versions<br>  of CMake by using their "VERSION" arguments' "<min>...<max>" syntax.<br>  This requires only the "<min>" version of CMake, but when running a<br>  newer version, sets policies up to the "<max>" version.<br><br>* On macOS with Ninja Generators and Makefile Generators, when a<br>  compiler is found in "/usr/bin", it is now used as-is and is no<br>  longer mapped to the corresponding compiler inside Xcode.<br><br>* Builds targeting macOS no longer choose any SDK or pass an<br>  "-isysroot" flag to the compiler by default.  Instead, compilers are<br>  expected to choose a default macOS SDK on their own.  In order to<br>  use a compiler that does not do this, users must now specify<br>  "-DCMAKE_OSX_SYSROOT=macosx" when configuring their build.<br><br>* Precompiled SunOS "sparc" and "i386" binaries are now provided on<br>  <a href="http://cmake.org">cmake.org</a>.<br><br><br>CMake 4.0 Release Notes<br>***********************<br><br>Changes made since CMake 3.31 include the following.<br><br><br>New Features<br>============<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.8.<br><br>* The "cmake-file-api(7)" "codemodel" version 2 "target" object gained<br>  a new "debugger" field.<br><br><br>Command-Line<br>------------<br><br>* The "cmake --link-no-warning-as-error" option was added to suppress<br>  the effects of the "LINK_WARNING_AS_ERROR" target property and<br>  "CMAKE_LINK_WARNING_AS_ERROR" variable.<br><br>* The "cmake --project-file" option was added to specify an alternate<br>  filename for "CMakeLists.txt" files.  This is intended for temporary<br>  use by developers during an incremental transition and not for<br>  publication of a final product.  CMake will always emit a warning<br>  when the project file is anything other than "CMakeLists.txt".<br><br><br>Commands<br>--------<br><br>* The "target_link_libraries()" command now supports the "LINKER:"<br>  prefix.<br><br><br>Variables<br>---------<br><br>* The "AIX" and "CMAKE_HOST_AIX" variables are now set to true when<br>  the target or host system is AIX, respectively.<br><br>* Linker flag variables learned to support the "LINKER:" prefix:<br><br>  * "CMAKE_EXE_LINKER_FLAGS"<br><br>  * "CMAKE_EXE_LINKER_FLAGS_<CONFIG>"<br><br>  * "CMAKE_SHARED_LINKER_FLAGS"<br><br>  * "CMAKE_SHARED_LINKER_FLAGS_<CONFIG>"<br><br>  * "CMAKE_MODULE_LINKER_FLAGS"<br><br>  * "CMAKE_MODULE_LINKER_FLAGS_<CONFIG>"<br><br>  See policy "CMP0181".<br><br>* The "CMAKE_EXECUTE_PROCESS_COMMAND_ERROR_IS_FATAL" variable was<br>  added to specify the "execute_process()" command's default<br>  "COMMAND_ERROR_IS_FATAL" behavior.<br><br>* The "CMAKE_<LANG>_LINK_MODE" and "CMAKE_<LANG>_DEVICE_LINK_MODE"<br>  variables were added to provide information on how the link step is<br>  done.<br><br>* The "CMAKE_LINK_WARNING_AS_ERROR" variable and corresponding<br>  "LINK_WARNING_AS_ERROR" target property were added to link using a<br>  linker-specific flag to treat warnings as errors.<br><br>* The "CMAKE_MSVC_RUNTIME_CHECKS" variable and "MSVC_RUNTIME_CHECKS"<br>  target property were introduced to select runtime checks for<br>  compilers targeting the MSVC ABI. See policy "CMP0184".<br><br>* The "CMAKE_POLICY_VERSION_MINIMUM" variable was added to help<br>  packagers and end users try to configure existing projects that have<br>  not been updated to work with supported CMake versions.<br><br>* The "CMAKE_XCODE_SCHEME_LLDB_INIT_FILE" variable and corresponding<br>  "XCODE_SCHEME_LLDB_INIT_FILE" target property were added to tell the<br>  "Xcode" generator what to put in the scheme's "LLDB Init File"<br>  setting.<br><br>* The "CMAKE_XCODE_SCHEME_TEST_CONFIGURATION" variable and<br>  corresponding "XCODE_SCHEME_TEST_CONFIGURATION" target property were<br>  added to tell the "Xcode" generator what to put in the scheme's<br>  "Build Configuration" setting for the test action.<br><br><br>Properties<br>----------<br><br>* The "DEBUGGER_WORKING_DIRECTORY" target property and corresponding<br>  "CMAKE_DEBUGGER_WORKING_DIRECTORY" variable were added to tell<br>  generators what debugger working directory should be set for<br>  targets.<br><br>* The "STATIC_LIBRARY_OPTIONS" target property now supports an<br>  "ARCHIVER:" prefix to pass options to the archiver through the<br>  compiler driver in a portable way.<br><br>* The "Swift_MODULE_DIRECTORY" target property now supports "generator<br>  expressions".<br><br>* The "VS_CUSTOM_COMMAND_DISABLE_PARALLEL_BUILD" source file property<br>  was added to tell Visual Studio Generators not to run a custom<br>  command in parallel.<br><br>* The "VS_SOLUTION_ITEMS" directory property was added to tell Visual<br>  Studio Generators to attach files directly to the Solution (".sln").<br><br><br>Modules<br>-------<br><br>* The "ExternalData" module gained a "ExternalData_HTTPHEADERS"<br>  variable to specify HTTP headers.<br><br>* The "ExternalProject" module's "ExternalProject_Add()" command<br>  gained an "INSTALL_JOB_SERVER_AWARE" option to enable integration of<br>  the GNU Make job server when using an explicit "INSTALL_COMMAND"<br>  with Makefile Generators.<br><br>* The "FeatureSummary" module "add_feature_info()" command now<br>  supports full Condition Syntax. See policy "CMP0183".<br><br>* The "FindBISON" module "bison_target()" command gained an "OPTIONS"<br>  option to specify Bison command-line options.<br><br>* The "FindCURL" module now provides a "CURL_VERSION" result variable<br>  to match upstream cURL's CMake package.<br><br>* The "FindFLEX" module "flex_target()" command gained an "OPTIONS"<br>  option to specify Flex command-line options.<br><br>* The "FindPatch" module now supports running in cmake -P script mode<br>  by skipping the creation of the imported target.<br><br>* The "FindProtobuf" module "protobuf_generate()" command gained a<br>  "PROTOC_EXE" option to specify a custom "protoc" executable.<br><br>* The "FindPython", "FindPython2", and "FindPython3" modules gained<br>  the possibility to do multiple calls in the same directory by using,<br>  respectively, the variables "Python_ARTIFACTS_PREFIX",<br>  "Python2_ARTIFACTS_PREFIX", and "Python3_ARTIFACTS_PREFIX".<br><br>* The "FindRuby" module learned to find rbenv-provided installations.<br><br><br>Generator Expressions<br>---------------------<br><br>* The "$<PATH>" generator expression gained the "NATIVE_PATH"<br>  operation to convert a CMake path into a native one.<br><br><br>CTest<br>-----<br><br>* The "ctest --interactive-debug-mode" option on Windows now enables<br>  Windows Error Reporting by default in test processes, allowing them<br>  to creating debug popup windows and core dumps. This restores<br>  behavior previously removed by CMake 3.11 after updates to "libuv"<br>  made it possible.<br><br><br>CPack<br>-----<br><br>* The "CPack Archive Generator" learned to generated ".tar" packages<br>  without compression.<br><br>* The "CPack Archive Generator" now honors the<br>  "CPACK_ARCHIVE_FILE_NAME" variable for all packages. Previously,<br>  this variable worked only for component-based packages.<br><br><br>Deprecated and Removed Features<br>===============================<br><br>* Compatibility with versions of CMake older than 3.5 has been<br>  removed. Calls to "cmake_minimum_required()" or "cmake_policy()"<br>  that set the policy version to an older value now issue an error.<br>  Note that calls to those commands can still support older versions<br>  of CMake by using their "VERSION" arguments' "<min>...<max>" syntax.<br>  This requires only the "<min>" version of CMake, but when running a<br>  newer version, sets policies up to the "<max>" version.<br><br>* The "Visual Studio 14 2015" and "Visual Studio 15 2017" generators<br>  no longer support specifying a platform as part of the generator<br>  name.  See Visual Studio Platform Selection.<br><br>* The "CMAKE_<LANG>_USING_LINKER_MODE" variable is no longer used to<br>  determine the type of the contents of the<br>  "CMAKE_<LANG>_USING_LINKER_<TYPE>" variable. The<br>  "CMAKE_<LANG>_LINK_MODE" variable, set by CMake, is used instead.<br><br>* The "FindGDAL" module is now deprecated in favor of upstream GDAL's<br>  official CMake package configuration file. Port projects to the<br>  latter by calling "find_package(GDAL CONFIG)".  For further details,<br>  see GDAL's documentation on CMake integration.<br><br>* The "FindRuby" module no longer provides variables with the upper-<br>  case "RUBY_" prefix.  See policy "CMP0185".<br><br>* CTest's undocumented declarative scripting mode has been removed.<br>  This mode used to be triggered by a "ctest -S" script which did not<br>  call any CTest Commands unless "CTEST_RUN_CURRENT_SCRIPT" was<br>  explicitly set to "OFF".<br><br>* The "ctest_run_script()" command may no longer be called without any<br>  arguments.<br><br><br>Other Changes<br>=============<br><br>* On macOS with Ninja Generators and Makefile Generators, when a<br>  compiler is found in "/usr/bin", it is now used as-is and is no<br>  longer mapped to the corresponding compiler inside Xcode.  The<br>  mapping was introduced by CMake 3.2 to allow build trees to continue<br>  to work with their original compiler even when "xcode-select"<br>  switches to a different Xcode installation.  However, the compilers<br>  inside Xcode cannot be used without explicit "-isysroot" flags and<br>  are therefore not suitable for passing to arbitrary third-party<br>  build systems.  Furthermore, the mapping behavior can override user-<br>  specified compiler paths.  Therefore, this behavior has been<br>  reverted.<br><br>* Builds targeting macOS no longer choose any SDK or pass an<br>  "-isysroot" flag to the compiler by default.  Instead, compilers are<br>  expected to choose a default macOS SDK on their own.  In order to<br>  use a compiler that does not do this, users must now specify<br>  "-DCMAKE_OSX_SYSROOT=macosx" when configuring their build.<br><br>* On AIX, "SHARED" library targets now produce a shared library<br>  archive by default.  See policy "CMP0182".<br><br>* The "cmake --preset" command no longer outputs a summary of the<br>  preset's CMake cache and environment variables by default.  That<br>  summary is now only shown when the message log level is set to<br>  "VERBOSE", "DEBUG", or "TRACE" via the   "cmake --log-level" option<br>  or the "CMAKE_MESSAGE_LOG_LEVEL" cache variable.<br><br>* Precompiled SunOS "sparc" and "i386" binaries are now provided on<br>  <a href="http://cmake.org">cmake.org</a>.<br></div>