CMake 4.0 Release Notes — CMake 4.0.1 Documentation (original) (raw)
Contents
Changes made since CMake 3.31 include the following.
New Features¶
File-Based API¶
- The cmake-file-api(7) "codemodel" version 2
version
field has been updated to 2.8. - The cmake-file-api(7) "codemodel" version 2 "target" object gained a new
debugger
field.
Command-Line¶
- The cmake --link-no-warning-as-error option was added to suppress the effects of the LINK_WARNING_AS_ERROR target property andCMAKE_LINK_WARNING_AS_ERROR variable.
- The cmake --project-file option was added to specify an alternate filename for
CMakeLists.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 the
LINKER:
prefix.
Variables¶
- The AIX and CMAKE_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: - The CMAKE_EXECUTE_PROCESS_COMMAND_ERROR_IS_FATAL variable was added to specify the execute_process() command's default
COMMAND_ERROR_IS_FATAL
behavior. - The CMAKE__LINK_MODE andCMAKE__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 policy CMP0184.
- 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_POLICY_VERSION_MINIMUM environment variable was added to initialize it.
- The CMAKE_UNITY_BUILD_RELOCATABLE variable and correspondingUNITY_BUILD_RELOCATABLE target property were added to make sources generated for CMAKE_UNITY_BUILD to
#include
the original source files using relative paths where possible. - The CMAKE_XCODE_SCHEME_LLDB_INIT_FILE variable and correspondingXCODE_SCHEME_LLDB_INIT_FILE target property were added to tell the Xcode 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 the Xcode 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 an
ARCHIVER:
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's ExternalProject_Add()command gained an
INSTALL_JOB_SERVER_AWARE
option to enable integration of the GNU Make job server when using an explicitINSTALL_COMMAND
with Makefile Generators. - The FeatureSummary module add_feature_info()command now supports full Condition Syntax. See policy CMP0183.
- The FindBISON module bison_target() command gained an
OPTIONS
option to specify Bison command-line options. - The FindCURL module now provides a
CURL_VERSION
result variable to match upstream cURL's CMake package. - The FindFLEX module flex_target() command gained an
OPTIONS
option to specify Flex command-line options. - The FindPatch module now supports running incmake -P script mode by skipping the creation of the imported target.
- The FindProtobuf module protobuf_generate() command gained a
PROTOC_EXE
option to specify a customprotoc
executable. - The FindPython, FindPython2, and FindPython3modules gained the possibility to do multiple calls in the same directory by using, respectively, the variables
Python_ARTIFACTS_PREFIX
,Python2_ARTIFACTS_PREFIX
, andPython3_ARTIFACTS_PREFIX
. - The FindRuby module learned to find rbenv-provided installations.
Generator Expressions¶
- The $
generator expression gained the NATIVE_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 to
libuv
made it possible.
CPack¶
- The [CPack Archive Generator](../cpack%5Fgen/archive.html#cpack%5Fgen:CPack Archive Generator "CPack Archive Generator") learned to generate
.tar
packages without compression. - The [CPack Archive Generator](../cpack%5Fgen/archive.html#cpack%5Fgen:CPack Archive Generator "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() or cmake_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 their
VERSION
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](../generator/Visual%20Studio%2014%202015.html#generator:Visual Studio 14 2015 "Visual Studio 14 2015") and [Visual Studio 15 2017](../generator/Visual%20Studio%2015%202017.html#generator:Visual Studio 15 2017 "Visual Studio 15 2017")generators no longer support specifying a platform as part of the generator name. See Visual Studio Platform Selection.
- The CMAKE__USING_LINKER_MODE variable is no longer used to determine the type of the contents of theCMAKE__USING_LINKER_ variable. TheCMAKE__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 calling
find_package(GDAL CONFIG)
. For further details, see GDAL's documentation on CMake integration. - The FindRuby module no longer provides variables with the upper-case
RUBY_
prefix. See policy CMP0185. - 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 unless CTEST_RUN_CURRENT_SCRIPTwas explicitly set to
OFF
. - 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 CMAKE_OSX_SYSROOTwhen configuring their build, e.g.,-DCMAKE_OSX_SYSROOT=macosx
.
Note that Xcode's compilers, when not invoked with-isysroot
, search for headers in/usr/local/include
before system SDK paths, matching the convention on many platforms. Users on macOS-x86_64 hosts with Homebrew installed in/usr/local
should pass-DCMAKE_OSX_SYSROOT=macosx
, orexport SDKROOT=macosx
, when not building with Homebrew tools. - On AIX,
SHARED
library targets now produce a shared library archive by default. See policy CMP0182. - 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 to
VERBOSE
,DEBUG
, orTRACE
via the cmake --log-level option or theCMAKE_MESSAGE_LOG_LEVEL cache variable. - Precompiled SunOS
sparc64
andx86_64
binaries are now provided on cmake.org.
Updates¶
Changes made since CMake 4.0.0 include the following.
4.0.1¶
- This version made no changes to documented features or interfaces. Some implementation updates were made to support ecosystem changes and/or fix regressions.