CMake 4.0 Release Notes¶
Changes made since CMake 3.31 include the following.
New Features¶
File-Based API¶
The
cmake-file-api(7)
"codemodel" version 2version
field has been updated to 2.8.The
cmake-file-api(7)
"codemodel" version 2 "target" object gained a newdebugger
field.
Command-Line¶
The
cmake --link-no-warning-as-error
option was added to suppress the effects of theLINK_WARNING_AS_ERROR
target property andCMAKE_LINK_WARNING_AS_ERROR
variable.The
cmake --project-file
option was added to specify an alternate filename forCMakeLists.txt
files. This is intended for temporary use by developers during an incremental transition and not for publication of a final product. CMake will always emit a warning when the project file is anything other thanCMakeLists.txt
.
Commands¶
The
target_link_libraries()
command now supports theLINKER:
prefix.
Variables¶
The
AIX
andCMAKE_HOST_AIX
variables are now set to true when the target or host system is AIX, respectively.Linker flag variables learned to support the
LINKER:
prefix:See policy
CMP0181
.The
CMAKE_EXECUTE_PROCESS_COMMAND_ERROR_IS_FATAL
variable was added to specify theexecute_process()
command's defaultCOMMAND_ERROR_IS_FATAL
behavior.The
CMAKE_<LANG>_LINK_MODE
andCMAKE_<LANG>_DEVICE_LINK_MODE
variables were added to provide information on how the link step is done.The
CMAKE_LINK_WARNING_AS_ERROR
variable and correspondingLINK_WARNING_AS_ERROR
target property were added to link using a linker-specific flag to treat warnings as errors.The
CMAKE_MSVC_RUNTIME_CHECKS
variable andMSVC_RUNTIME_CHECKS
target property were introduced to select runtime checks for compilers targeting the MSVC ABI. See policyCMP0184
.The
CMAKE_POLICY_VERSION_MINIMUM
variable was added to help packagers and end users try to configure existing projects that have not been updated to work with supported CMake versions.The
CMAKE_XCODE_SCHEME_LLDB_INIT_FILE
variable and correspondingXCODE_SCHEME_LLDB_INIT_FILE
target property were added to tell theXcode
generator what to put in the scheme's "LLDB Init File" setting.The
CMAKE_XCODE_SCHEME_TEST_CONFIGURATION
variable and correspondingXCODE_SCHEME_TEST_CONFIGURATION
target property were added to tell theXcode
generator what to put in the scheme's "Build Configuration" setting for the test action.
Properties¶
The
DEBUGGER_WORKING_DIRECTORY
target property and correspondingCMAKE_DEBUGGER_WORKING_DIRECTORY
variable were added to tell generators what debugger working directory should be set for targets.The
STATIC_LIBRARY_OPTIONS
target property now supports anARCHIVER:
prefix to pass options to the archiver through the compiler driver in a portable way.The
Swift_MODULE_DIRECTORY
target property now supportsgenerator expressions
.The
VS_CUSTOM_COMMAND_DISABLE_PARALLEL_BUILD
source file property was added to tell Visual Studio Generators not to run a custom command in parallel.The
VS_SOLUTION_ITEMS
directory property was added to tell Visual Studio Generators to attach files directly to the Solution (.sln
).
Modules¶
The
ExternalData
module gained aExternalData_HTTPHEADERS
variable to specify HTTP headers.The
ExternalProject
module'sExternalProject_Add()
command gained anINSTALL_JOB_SERVER_AWARE
option to enable integration of the GNU Make job server when using an explicitINSTALL_COMMAND
with Makefile Generators.The
FeatureSummary
moduleadd_feature_info()
command now supports full Condition Syntax. See policyCMP0183
.The
FindBISON
modulebison_target()
command gained anOPTIONS
option to specify Bison command-line options.The
FindCURL
module now provides aCURL_VERSION
result variable to match upstream cURL's CMake package.The
FindFLEX
moduleflex_target()
command gained anOPTIONS
option to specify Flex command-line options.The
FindPatch
module now supports running in cmake -P script mode by skipping the creation of the imported target.The
FindProtobuf
moduleprotobuf_generate()
command gained aPROTOC_EXE
option to specify a customprotoc
executable.The
FindPython
,FindPython2
, andFindPython3
modules gained the possibility to do multiple calls in the same directory by using, respectively, the variablesPython_ARTIFACTS_PREFIX
,Python2_ARTIFACTS_PREFIX
, andPython3_ARTIFACTS_PREFIX
.The
FindRuby
module learned to find rbenv-provided installations.
Generator Expressions¶
The
$<PATH>
generator expression gained theNATIVE_PATH
operation to convert a CMake path into a native one.
CTest¶
The
ctest --interactive-debug-mode
option on Windows now enables Windows Error Reporting by default in test processes, allowing them to creating debug popup windows and core dumps. This restores behavior previously removed by CMake 3.11 after updates tolibuv
made it possible.
CPack¶
The
CPack Archive Generator
learned to generated.tar
packages without compression.The
CPack Archive Generator
now honors theCPACK_ARCHIVE_FILE_NAME
variable for all packages. Previously, this variable worked only for component-based packages.
Deprecated and Removed Features¶
Compatibility with versions of CMake older than 3.5 has been removed. Calls to
cmake_minimum_required()
orcmake_policy()
that set the policy version to an older value now issue an error. Note that calls to those commands can still support older versions of CMake by using theirVERSION
arguments'<min>...<max>
syntax. This requires only the<min>
version of CMake, but when running a newer version, sets policies up to the<max>
version.The
Visual Studio 14 2015
andVisual Studio 15 2017
generators no longer support specifying a platform as part of the generator name. See Visual Studio Platform Selection.The
CMAKE_<LANG>_USING_LINKER_MODE
variable is no longer used to determine the type of the contents of theCMAKE_<LANG>_USING_LINKER_<TYPE>
variable. TheCMAKE_<LANG>_LINK_MODE
variable, set by CMake, is used instead.The
FindGDAL
module is now deprecated in favor of upstream GDAL's official CMake package configuration file. Port projects to the latter by callingfind_package(GDAL CONFIG)
. For further details, see GDAL's documentation on CMake integration.The
FindRuby
module no longer provides variables with the upper-caseRUBY_
prefix. See policyCMP0185
.CTest's undocumented declarative scripting mode has been removed. This mode used to be triggered by a
ctest -S
script which did not call any CTest Commands unlessCTEST_RUN_CURRENT_SCRIPT
was explicitly set toOFF
.The
ctest_run_script()
command may no longer be called without any arguments.
Other Changes¶
On macOS with Ninja Generators and Makefile Generators, when a compiler is found in
/usr/bin
, it is now used as-is and is no longer mapped to the corresponding compiler inside Xcode. The mapping was introduced by CMake 3.2 to allow build trees to continue to work with their original compiler even whenxcode-select
switches to a different Xcode installation. However, the compilers inside Xcode cannot be used without explicit-isysroot
flags and are therefore not suitable for passing to arbitrary third-party build systems. Furthermore, the mapping behavior can override user-specified compiler paths. Therefore, this behavior has been reverted.Builds targeting macOS no longer choose any SDK or pass an
-isysroot
flag to the compiler by default. Instead, compilers are expected to choose a default macOS SDK on their own. In order to use a compiler that does not do this, users must now specify-DCMAKE_OSX_SYSROOT=macosx
when configuring their build.On AIX,
SHARED
library targets now produce a shared library archive by default. See policyCMP0182
.The
cmake --preset
command no longer outputs a summary of the preset's CMake cache and environment variables by default. That summary is now only shown when the message log level is set toVERBOSE
,DEBUG
, orTRACE
via thecmake --log-level
option or theCMAKE_MESSAGE_LOG_LEVEL
cache variable.Precompiled SunOS
sparc
andi386
binaries are now provided on cmake.org.