<div dir="ltr">I am proud to announce the first CMake 4.1 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.1">https://cmake.org/cmake/help/v4.1</a><br><br>Release notes appear below and are also published at<br>  <a href="https://cmake.org/cmake/help/v4.1/release/4.1.html">https://cmake.org/cmake/help/v4.1/release/4.1.html</a><br><br>Release milestone is available at:<br>  <a href="https://gitlab.kitware.com/cmake/cmake/-/milestones/171">https://gitlab.kitware.com/cmake/cmake/-/milestones/171</a><br><br>Some of the most significant changes in CMake 4.1 are:<br><br>* The "cmake-configure-log(7)" now reports events from<br>  "find_package()" (in "CONFIG" mode), "find_path()", "find_file()",<br>  "find_library()", and "find_program()" commands when first invoked,<br>  when their results transition between "not found" and "found", or<br>  when enabled explicitly by the "--debug-find" command-line option.<br><br>* The "cmake_pkg_config()" command now supports the "IMPORT" and<br>  "POPULATE" subcommands for interfacing CMake targets with pkg-config<br>  based dependencies.<br><br>* The "CMAKE_FIND_REQUIRED" variable was added to tell<br>  "find_package()", "find_path()", "find_file()", "find_library()",<br>  and "find_program()" to be "REQUIRED" by default.  The commands also<br>  gained an "OPTIONAL" keyword to ignore the variable for a specific<br>  call.<br><br>* The "FindBLAS" and "FindLAPACK" modules now support the NVIDIA<br>  Performance Libraries (NVPL).<br><br>* The "string(REGEX MATCHALL)", "string(REGEX REPLACE)", and<br>  "list(TRANSFORM REPLACE)" commands now match the regular expression<br>  "^" anchor at most once in repeated searches, at the start of the<br>  input. See policy "CMP0186".<br><br>* The "TARGET_PROPERTY" generator expression now evaluates the<br>  "LINK_LIBRARIES" and "INTERFACE_LINK_LIBRARIES" target properties<br>  transitively.  See policy "CMP0189".<br><br><br>CMake 4.1 Release Notes<br>***********************<br><br>Changes made since CMake 4.0 include the following.<br><br><br>New Features<br>============<br><br><br>File-Based API<br>--------------<br><br>* The "cmake-file-api(7)" v1 now writes partial replies when<br>  buildsystem generation fails with an error. See the v1 Reply Error<br>  Index.<br><br><br>Generators<br>----------<br><br>* Makefile Generators and Ninja Generators gained support for adding a<br>  linker launcher with "Fortran", "CUDA", and "HIP". See the<br>  "CMAKE_<LANG>_LINKER_LAUNCHER" variable and "<LANG>_LINKER_LAUNCHER"<br>  target property for details.<br><br><br>Command-Line<br>------------<br><br>* The cmake --build command-line tool, when used with the "Xcode"<br>  generator, now detects when a third-party tool has wrapped the<br>  generated ".xcodeproj" in a ".xcworkspace", and drives the build<br>  through the workspace instead.<br><br><br>Configure Log<br>-------------<br><br>* The "cmake-configure-log(7)" now reports events from<br>  "find_package()" (in "CONFIG" mode), "find_path()", "find_file()",<br>  "find_library()", and "find_program()" commands when first invoked,<br>  when their results transition between "not found" and "found", or<br>  when enabled explicitly by the "--debug-find" command-line option.<br>  See Event Kind find and Event Kind find_package.  Logging may also<br>  be controlled by the "CMAKE_FIND_DEBUG_MODE" and<br>  "CMAKE_FIND_DEBUG_MODE_NO_IMPLICIT_CONFIGURE_LOG" variables.<br><br><br>Compilers<br>---------<br><br>* Diab compilers from Wind River Systems, versions 5.9.x+, are now<br>  supported with "compiler id" "Diab" for languages "ASM", "C", and<br>  "CXX".<br><br><br>Commands<br>--------<br><br>* The "add_dependencies()" command may be called with no dependencies.<br><br>* The "cmake_pkg_config()" command now supports the "IMPORT" and<br>  "POPULATE" subcommands for interfacing CMake targets with pkg-config<br>  based dependencies.<br><br>* The "install(DIRECTORY)" command gained a new<br>  "EXCLUDE_EMPTY_DIRECTORIES" option to skip installation of empty<br>  directories.<br><br>* The "project()" command now has experimental support for the<br>  "COMPAT_VERSION" keyword, gated by<br>  "CMAKE_EXPERIMENTAL_EXPORT_PACKAGE_INFO".<br><br><br>Variables<br>---------<br><br>* The "CMAKE_FIND_REQUIRED" variable was added to tell<br>  "find_package()", "find_path()", "find_file()", "find_library()",<br>  and "find_program()" to be "REQUIRED" by default.  The commands also<br>  gained an "OPTIONAL" keyword to ignore the variable for a specific<br>  call.<br><br>* The "CMAKE_<LANG>_COMPILER_ARCHITECTURE_ID" variable is now<br>  populated for most compilers, and documented for public use.<br><br>* The "CMAKE_<LANG>_ICSTAT" variable and corresponding "<LANG>_ICSTAT"<br>  target property were added to tell the Makefile Generators and the<br>  Ninja Generators to run the IAR "icstat" tool along with the<br>  compiler for "C" and "CXX" languages.<br><br><br>Environment Variables<br>---------------------<br><br>* The "CMAKE_<LANG>_IMPLICIT_LINK_LIBRARIES_EXCLUDE" environment<br>  variable was added to optionally exclude specific libraries from the<br>  detected set of "CMAKE_<LANG>_IMPLICIT_LINK_LIBRARIES".<br><br><br>Properties<br>----------<br><br>* The "AUTOMOC_INCLUDE_DIRECTORIES" target property and associated<br>  "CMAKE_AUTOMOC_INCLUDE_DIRECTORIES" variable were added to override<br>  the automatic discovery of moc includes from a target's transitive<br>  include directories.<br><br>* The "MACOSX_PACKAGE_LOCATION" source file property now works when<br>  set on a source directory, and copies its entire tree into the<br>  bundle.<br><br>* The "PDB_NAME" and "COMPILE_PDB_NAME" target properties now support<br>  "generator expressions".<br><br><br>Modules<br>-------<br><br>* The "FindASPELL" module now provides a version variable, imported<br>  targets, and components to optionally select the Aspell library and<br>  executable separately.<br><br>* The "FindBLAS" and "FindLAPACK" modules now support the NVIDIA<br>  Performance Libraries (NVPL).<br><br>* The "FindProtobuf" module's "protobuf_generate(DEPENDENCIES)"<br>  command argument now accepts multiple values.<br><br>* The "FindProtobuf" module's "protobuf_generate_cpp()" and<br>  "protobuf_generate_python()" commands, together with their<br>  "Protobuf_IMPORT_DIRS" and "PROTOBUF_GENERATE_CPP_APPEND_PATH" hint<br>  variables, are now deprecated in favor of the "protobuf_generate()"<br>  command.<br><br><br>Regular Expressions<br>-------------------<br><br>* The "string(REGEX MATCHALL)", "string(REGEX REPLACE)", and<br>  "list(TRANSFORM REPLACE)" commands now match the regular expression<br>  "^" anchor at most once in repeated searches, at the start of the<br>  input. See policy "CMP0186".<br><br>* The "string(REGEX REPLACE)" command now allows references to<br>  unmatched groups.  They are replaced with empty strings.<br><br>* The "string(REGEX MATCH)", "string(REGEX MATCHALL)", and<br>  "string(REGEX REPLACE)" commands now allow zero-length matches.<br><br><br>CTest<br>-----<br><br>* "ctest(1)" gained a "--schedule-random-seed" option to specify a<br>  numeric random seed to make "ctest --schedule-random" deterministic<br>  for reproduction.<br><br><br>CPack<br>-----<br><br>* The "CPack NuGet Generator" gained option<br>  "CPACK_NUGET_SYMBOL_PACKAGE" to generate NuGet symbol packages<br>  containing PDB files.<br><br>* The "CPack RPM Generator" gained "CPACK_RPM_PACKAGE_ENHANCES",<br>  "CPACK_RPM_PACKAGE_RECOMMENDS", and "CPACK_RPM_PACKAGE_SUPPLEMENTS"<br>  variables to specify the corresponding RPM spec fields.<br><br><br>Deprecated and Removed Features<br>===============================<br><br>* The "FindGTest" module's result variables "GTEST_INCLUDE_DIRS",<br>  "GTEST_LIBRARIES", "GTEST_MAIN_LIBRARIES", and<br>  "GTEST_BOTH_LIBRARIES" are now deprecated in favor of using<br>  "GTest::gtest" and "GTest::gtest_main" imported targets.<br><br>* The "FindGCCXML" module has been deprecated via policy "CMP0188".<br>  Port projects to CastXML instead.<br><br>* The "FindCABLE" module has been deprecated via policy "CMP0191".<br><br>* The "CMakeDetermineVSServicePack" module has been deprecated via<br>  policy "CMP0196".  Port projects to the<br>  "CMAKE_<LANG>_COMPILER_VERSION" variable instead.<br><br><br>Other Changes<br>=============<br><br>* The "ExternalProject" module no longer checks the "URL" archive file<br>  extension.  Any archive type that "cmake -E tar" can extract is now<br>  allowed.<br><br>* Modules "FindPython3", "FindPython2" and "FindPython" now enforce<br>  consistency of artifacts in cross-compiling mode.  This prevents<br>  mixing host and target artifacts. See policy "CMP0190".<br><br>* The "GNUInstallDirs" module now prefers to default "SYSCONFDIR",<br>  "LOCALSTATEDIR", and "RUNSTATEDIR" to absolute paths when installing<br>  to special prefixes. See policy "CMP0192".<br><br>* The "GNUInstallDirs" module now caches "CMAKE_INSTALL_*" variables<br>  with their leading "usr/" for install prefix "/". See policy<br>  "CMP0193".<br><br>* The "install(TARGETS)" command no longer ignores file sets which<br>  haven't been defined at the point it is called. The ordering of<br>  "target_sources(FILE_SET)" and "install(TARGETS)" is no longer<br>  semantically relevant.<br><br>* Enabling "ASM" no longer accidentally succeeds using "MSVC"'s "cl" C<br>  compiler as an assembler.  See policy "CMP0194".<br><br>* The MSVC link "-machine:" flag is no longer added to the<br>  "CMAKE_*_LINKER_FLAGS" variables.  See policy "CMP0197".<br><br>* The "TARGET_PROPERTY" generator expression now evaluates the<br>  "LINK_LIBRARIES" and "INTERFACE_LINK_LIBRARIES" target properties<br>  transitively.  See policy "CMP0189".<br><br></div>