# CMake 4.1.0 available for download

**URL:** https://discourse.cmake.org/t/cmake-4-1-0-available-for-download/14970
**Category:** Announcements
**Created:** [August 7, 2025, 6:06pm UTC](https://discourse.cmake.org/t/cmake-4-1-0-available-for-download/14970 "2025-08-07T18:06:24Z")
**Posts on this page:** 1
**Page:** 1

<div class="post-metadata">

### Author: ![johnwparent](https://discourse.cmake.org/user_avatar/discourse.cmake.org/johnwparent/32/2179_2.png) [@johnwparent](https://discourse.cmake.org/u/johnwparent)
#### Post date: [August 7, 2025, 6:06pm UTC](https://discourse.cmake.org/t/cmake-4-1-0-available-for-download/14970/1 "2025-08-07T18:06:24Z")

</div>

We are pleased to announce that CMake 4.1 is now available for download.  
[https://cmake.org/download/](https://cmake.org/download/)

Documentation is available at:  
[https://cmake.org/cmake/help/v4.1](https://cmake.org/cmake/help/v4.1)

Release notes appear below and are also published at  
[https://cmake.org/cmake/help/v4.1/release/4.1.html](https://cmake.org/cmake/help/v4.1/release/4.1.html)

Release milestone is available at:  
[release milestone](https://gitlab.kitware.com/cmake/cmake/-/milestones/171)

Some of the most significant changes in CMake 4.1 are:

- The “cmake-configure-log(7)” now reports events from  
“find\_package()” (in “CONFIG” mode), “find\_path()”, “find\_file()”,  
“find\_library()”, and “find\_program()” commands when first invoked,  
when their results transition between “not found” and “found”, or  
when enabled explicitly by the “–debug-find” command-line option.

- The “cmake\_pkg\_config()” command now supports the “IMPORT” and  
“POPULATE” subcommands for interfacing CMake targets with pkg-config  
based dependencies.

- The “CMAKE\_FIND\_REQUIRED” variable was added to tell  
“find\_package()”, “find\_path()”, “find\_file()”, “find\_library()”,  
and “find\_program()” to be “REQUIRED” by default. The commands also  
gained an “OPTIONAL” keyword to ignore the variable for a specific  
call.

- The “FindBLAS” and “FindLAPACK” modules now support the NVIDIA  
Performance Libraries (NVPL).

- The “string(REGEX MATCHALL)”, “string(REGEX REPLACE)”, and  
“list(TRANSFORM REPLACE)” commands now match the regular expression  
“^” anchor at most once in repeated searches, at the start of the  
input. See policy “CMP0186”.

- The “TARGET\_PROPERTY” generator expression now evaluates the  
“LINK\_LIBRARIES” and “INTERFACE\_LINK\_LIBRARIES” target properties  
transitively. See policy “CMP0189”.  
CMake 4.1 Release Notes

* * *

Changes made since CMake 4.0 include the following.

# New Features

## File-Based API

- The “cmake-file-api(7)” v1 now writes partial replies when  
buildsystem generation fails with an error. See the v1 Reply Error  
Index.

## Generators

- Makefile Generators and Ninja Generators gained support for adding a  
linker launcher with “Fortran”, “CUDA”, and “HIP”. See the  
“CMAKE\_\<LANG\>\_LINKER\_LAUNCHER” variable and “\<LANG\>\_LINKER\_LAUNCHER”  
target property for details.

## Command-Line

- The cmake --build command-line tool, when used with the “Xcode”  
generator, now detects when a third-party tool has wrapped the  
generated “.xcodeproj” in a “.xcworkspace”, and drives the build  
through the workspace instead.

## Configure Log

- The “cmake-configure-log(7)” now reports events from  
“find\_package()” (in “CONFIG” mode), “find\_path()”, “find\_file()”,  
“find\_library()”, and “find\_program()” commands when first invoked,  
when their results transition between “not found” and “found”, or  
when enabled explicitly by the “–debug-find” command-line option.  
See Event Kind find and Event Kind find\_package. Logging may also  
be controlled by the “CMAKE\_FIND\_DEBUG\_MODE” and  
“CMAKE\_FIND\_DEBUG\_MODE\_NO\_IMPLICIT\_CONFIGURE\_LOG” variables.

## Compilers

- Diab compilers from Wind River Systems, versions 5.9.x+, are now  
supported with “compiler id” “Diab” for languages “ASM”, “C”, and  
“CXX”.

- Renesas Compilers are now supported with “compiler id” “Renesas” for  
languages “ASM” and “C”.

## Commands

- The “add\_dependencies()” command may be called with no dependencies.

- The “cmake\_pkg\_config()” command now supports the “IMPORT” and  
“POPULATE” subcommands for interfacing CMake targets with pkg-config  
based dependencies.

- The “project()” command now has experimental support for the  
“COMPAT\_VERSION” keyword, gated by  
“CMAKE\_EXPERIMENTAL\_EXPORT\_PACKAGE\_INFO”.

## Variables

- The “CMAKE\_FIND\_REQUIRED” variable was added to tell  
“find\_package()”, “find\_path()”, “find\_file()”, “find\_library()”,  
and “find\_program()” to be “REQUIRED” by default. The commands also  
gained an “OPTIONAL” keyword to ignore the variable for a specific  
call.

- The “CMAKE\_\<LANG\>\_COMPILER\_ARCHITECTURE\_ID” variable is now  
populated for most compilers, and documented for public use.

- The “CMAKE\_\<LANG\>\_ICSTAT” variable and corresponding “\<LANG\>\_ICSTAT”  
target property were added to tell the Makefile Generators and the  
Ninja Generators to run the IAR “icstat” tool along with the  
compiler for “C” and “CXX” languages.

## Environment Variables

- The “CMAKE\_\<LANG\>_IMPLICIT\_LINK\_LIBRARIES\_EXCLUDE" environment  
variable was added to optionally exclude specific libraries from the  
detected set of "CMAKE_\<LANG\>\_IMPLICIT\_LINK\_LIBRARIES”.

## Properties

- The “AUTOMOC\_INCLUDE\_DIRECTORIES” target property and associated  
“CMAKE\_AUTOMOC\_INCLUDE\_DIRECTORIES” variable were added to override  
the automatic discovery of moc includes from a target’s transitive  
include directories.

- The “MACOSX\_PACKAGE\_LOCATION” source file property now works when  
set on a source directory, and copies its entire tree into the  
bundle.

- The “PDB\_NAME” and “COMPILE\_PDB\_NAME” target properties now support  
“generator expressions”.

## Modules

- The “FindASPELL” module now provides a version variable, imported  
targets, and components to optionally select the Aspell library and  
executable separately.

- The “FindBLAS” and “FindLAPACK” modules now support the NVIDIA  
Performance Libraries (NVPL).

- The “FindProtobuf” module’s “protobuf\_generate(DEPENDENCIES)”  
command argument now accepts multiple values.

- The “FindProtobuf” module’s “protobuf\_generate\_cpp()” and  
“protobuf\_generate\_python()” commands, together with their  
“Protobuf\_IMPORT\_DIRS” and “PROTOBUF\_GENERATE\_CPP\_APPEND\_PATH” hint  
variables, are now deprecated in favor of the “protobuf\_generate()”  
command.

## Regular Expressions

- The “string(REGEX MATCHALL)”, “string(REGEX REPLACE)”, and  
“list(TRANSFORM REPLACE)” commands now match the regular expression  
“^” anchor at most once in repeated searches, at the start of the  
input. See policy “CMP0186”.

- The “string(REGEX REPLACE)” command now allows references to  
unmatched groups. They are replaced with empty strings.

- The “string(REGEX MATCH)”, “string(REGEX MATCHALL)”, and  
“string(REGEX REPLACE)” commands now allow zero-length matches.

## CTest

- “ctest(1)” gained a “–schedule-random-seed” option to specify a  
numeric random seed to make “ctest --schedule-random” deterministic  
for reproduction.

## CPack

- The “CPack NuGet Generator” gained option  
“CPACK\_NUGET\_SYMBOL\_PACKAGE” to generate NuGet symbol packages  
containing PDB files.

- The “CPack RPM Generator” gained “CPACK\_RPM\_PACKAGE\_ENHANCES”,  
“CPACK\_RPM\_PACKAGE\_RECOMMENDS”, and “CPACK\_RPM\_PACKAGE\_SUPPLEMENTS”  
variables to specify the corresponding RPM spec fields.

# Deprecated and Removed Features

- The “FindGTest” module’s result variables “GTEST\_INCLUDE\_DIRS”,  
“GTEST\_LIBRARIES”, “GTEST\_MAIN\_LIBRARIES”, and  
“GTEST\_BOTH\_LIBRARIES” are now deprecated in favor of using  
“GTest::gtest” and “GTest::gtest\_main” imported targets.

- The “FindGCCXML” module has been deprecated via policy “CMP0188”.  
Port projects to CastXML instead.

- The “FindCABLE” module has been deprecated via policy “CMP0191”.

- The “CMakeDetermineVSServicePack” module has been deprecated via  
policy “CMP0196”. Port projects to the  
“CMAKE\_\<LANG\>\_COMPILER\_VERSION” variable instead.

# Other Changes

- The “ExternalProject” module no longer checks the “URL” archive file  
extension. Any archive type that “cmake -E tar” can extract is now  
allowed.

- Modules “FindPython3”, “FindPython2” and “FindPython” now enforce  
consistency of artifacts in cross-compiling mode. This prevents  
mixing host and target artifacts. See policy “CMP0190”.

- The “GNUInstallDirs” module now prefers to default “SYSCONFDIR”,  
“LOCALSTATEDIR”, and “RUNSTATEDIR” to absolute paths when installing  
to special prefixes. See policy “CMP0192”.

- The “GNUInstallDirs” module now caches “CMAKE\_INSTALL\_\*” variables  
with their leading “usr/” for install prefix “/”. See policy  
“CMP0193”.

- The “install(TARGETS)” command no longer ignores file sets which  
haven’t been defined at the point it is called. The ordering of  
“target\_sources(FILE\_SET)” and “install(TARGETS)” is no longer  
semantically relevant.

- Enabling “ASM” no longer accidentally succeeds using “MSVC”'s “cl” C  
compiler as an assembler. See policy “CMP0194”.

- The MSVC link “-machine:” flag is no longer added to the  
“CMAKE\_\*\_LINKER\_FLAGS” variables. See policy “CMP0197”.

- The “TARGET\_PROPERTY” generator expression now evaluates the  
“LINK\_LIBRARIES” and “INTERFACE\_LINK\_LIBRARIES” target properties  
transitively. See policy “CMP0189”.

* * *

Changes made since CMake 4.1.0-rc4:

Ben Boeckel (1):

- QCC-CXX: use `-x c++` on 8+

Brad King (2):

- MSVC: Fix regression that links shared libraries with bogus -shared flag
- CMake 4.1.0

Heiko Becker (1):

- Autogen/RCC: Only pass --no-zstd to Qt6

KWIML Upstream (1): KWIML 2025-08-05 (2eae04db)

Robert Maynard (3):

- CUDA: Make sure CUDA architectures are in order
- CUDA: Add CUDA 13.0 support to ‘all’ and ‘all-major’ architecture tables
- CUDA: Update CUDA tests to handle CUDA 13 deprecations
