CMake 4.0 发行说明¶
自 CMake 3.31 以来的更改包括以下内容。
新特性¶
基于文件的 API¶
cmake-file-api(7)
“codemodel” 版本 2 的version
字段已更新至 2.8。cmake-file-api(7)
“codemodel” 版本 2 的 “target” 对象新增了debugger
字段。
命令行¶
添加了
cmake --link-no-warning-as-error
选项,用于抑制LINK_WARNING_AS_ERROR
目标属性和CMAKE_LINK_WARNING_AS_ERROR
变量的效果。添加了
cmake --project-file
选项,用于为CMakeLists.txt
文件指定备用文件名。这旨在供开发人员在增量转换期间临时使用,而不是用于发布最终产品。当项目文件不是CMakeLists.txt
时,CMake 始终会发出警告。
命令¶
target_link_libraries()
命令现在支持LINKER:
前缀。
变量¶
当目标系统或主机系统分别为 AIX 时,
AIX
和CMAKE_HOST_AIX
变量现在设置为 true。链接器标志变量学习支持
LINKER:
前缀请参阅策略
CMP0181
。添加了
CMAKE_EXECUTE_PROCESS_COMMAND_ERROR_IS_FATAL
变量,用于指定execute_process()
命令的默认COMMAND_ERROR_IS_FATAL
行为。添加了
CMAKE_<LANG>_LINK_MODE
和CMAKE_<LANG>_DEVICE_LINK_MODE
变量,以提供有关链接步骤如何完成的信息。添加了
CMAKE_LINK_WARNING_AS_ERROR
变量和相应的LINK_WARNING_AS_ERROR
目标属性,以使用特定于链接器的标志进行链接,从而将警告视为错误。引入了
CMAKE_MSVC_RUNTIME_CHECKS
变量和MSVC_RUNTIME_CHECKS
目标属性,以选择面向 MSVC ABI 的编译器的运行时检查。请参阅策略CMP0184
。添加了
CMAKE_POLICY_VERSION_MINIMUM
变量,以帮助打包者和最终用户尝试配置尚未更新为使用受支持的 CMake 版本的现有项目。添加了CMAKE_POLICY_VERSION_MINIMUM
环境变量来初始化它。添加了
CMAKE_XCODE_SCHEME_LLDB_INIT_FILE
变量和相应的XCODE_SCHEME_LLDB_INIT_FILE
目标属性,以告知Xcode
生成器在 scheme 的 “LLDB Init File” 设置中放入什么。添加了
CMAKE_XCODE_SCHEME_TEST_CONFIGURATION
变量和相应的XCODE_SCHEME_TEST_CONFIGURATION
目标属性,以告知Xcode
生成器在 scheme 的测试操作的 “Build Configuration” 设置中放入什么。
属性¶
添加了
DEBUGGER_WORKING_DIRECTORY
目标属性和相应的CMAKE_DEBUGGER_WORKING_DIRECTORY
变量,以告知生成器应为目标设置什么调试器工作目录。STATIC_LIBRARY_OPTIONS
目标属性现在支持ARCHIVER:
前缀,以通过编译器驱动程序以可移植的方式将选项传递给归档器。Swift_MODULE_DIRECTORY
目标属性现在支持生成器表达式
。添加了
VS_CUSTOM_COMMAND_DISABLE_PARALLEL_BUILD
源文件属性,以告知 Visual Studio 生成器 不要并行运行自定义命令。添加了
VS_SOLUTION_ITEMS
目录属性,以告知 Visual Studio 生成器 将文件直接附加到解决方案 (.sln
)。
模块¶
ExternalData
模块获得了ExternalData_HTTPHEADERS
变量,用于指定 HTTP 标头。ExternalProject
模块的ExternalProject_Add()
命令获得了INSTALL_JOB_SERVER_AWARE
选项,以便在使用显式INSTALL_COMMAND
和 Makefile 生成器 时启用 GNU Make 作业服务器的集成。FeatureSummary
模块的add_feature_info()
命令现在支持完整的 条件语法。请参阅策略CMP0183
。FindBISON
模块的bison_target()
命令获得了OPTIONS
选项,用于指定 Bison 命令行选项。FindCURL
模块现在提供了一个CURL_VERSION
结果变量,以匹配上游 cURL 的 CMake 包。FindFLEX
模块的flex_target()
命令获得了OPTIONS
选项,用于指定 Flex 命令行选项。FindProtobuf
模块的protobuf_generate()
命令获得了PROTOC_EXE
选项,用于指定自定义的protoc
可执行文件。FindPython
、FindPython2
和FindPython3
模块增加了在同一目录中进行多次调用的可能性,分别使用变量Python_ARTIFACTS_PREFIX
、Python2_ARTIFACTS_PREFIX
和Python3_ARTIFACTS_PREFIX
。FindRuby
模块学会了查找 rbenv 提供的安装。
生成器表达式¶
$<PATH>
生成器表达式获得了NATIVE_PATH
操作,用于将 CMake 路径转换为本机路径。
CTest¶
Windows 上的
ctest --interactive-debug-mode
选项现在默认在测试进程中启用 Windows 错误报告,允许它们创建调试弹出窗口和核心转储。这恢复了 CMake 3.11 在更新到libuv
后移除的行为,因为更新到libuv
使其成为可能。
CPack¶
CPack Archive Generator
学会了生成没有压缩的.tar
包。CPack Archive Generator
现在为所有包都遵循CPACK_ARCHIVE_FILE_NAME
变量。以前,此变量仅适用于基于组件的包。
已弃用和移除的特性¶
已移除与 CMake 3.5 之前版本的兼容性。现在,调用
cmake_minimum_required()
或cmake_policy()
将策略版本设置为旧值的操作现在会发出错误。请注意,通过使用其VERSION
参数的<min>...<max>
语法,对这些命令的调用仍然可以支持旧版本的 CMake。这仅需要 CMake 的<min>
版本,但在运行较新版本时,会将策略设置为最高<max>
版本。Visual Studio 14 2015
和Visual Studio 15 2017
生成器不再支持将平台指定为生成器名称的一部分。请参阅 Visual Studio 平台选择。不再使用
CMAKE_<LANG>_USING_LINKER_MODE
变量来确定CMAKE_<LANG>_USING_LINKER_<TYPE>
变量内容的类型。而是使用 CMake 设置的CMAKE_<LANG>_LINK_MODE
变量。FindGDAL
模块现在已弃用,建议使用上游 GDAL 的官方 CMake 包配置文件。通过调用find_package(GDAL CONFIG)
将项目移植到后者。有关更多详细信息,请参阅 GDAL 关于 CMake 集成的文档。已移除 CTest 未记录的声明式脚本模式。此模式过去由
ctest -S
脚本触发,该脚本除非显式将CTEST_RUN_CURRENT_SCRIPT
设置为OFF
,否则不调用任何 CTest 命令。ctest_run_script()
命令可能不再在没有任何参数的情况下调用。
其他更改¶
在使用 Ninja 生成器 和 Makefile 生成器 的 macOS 上,当在
/usr/bin
中找到编译器时,现在按原样使用它,并且不再映射到 Xcode 内的相应编译器。CMake 3.2 引入了映射,以允许构建树继续使用其原始编译器,即使xcode-select
切换到不同的 Xcode 安装也是如此。但是,Xcode 内的编译器在没有显式-isysroot
标志的情况下无法使用,因此不适合传递给任意第三方构建系统。此外,映射行为可能会覆盖用户指定的编译器路径。因此,此行为已被还原。面向 macOS 的构建不再默认选择任何 SDK 或将
-isysroot
标志传递给编译器。相反,编译器应自行选择默认的 macOS SDK。为了使用不执行此操作的编译器,用户现在必须在配置其构建时指定-DCMAKE_OSX_SYSROOT=macosx
。在 AIX 上,
SHARED
库目标现在默认生成共享库归档文件。请参阅策略CMP0182
。cmake --preset
命令不再默认输出预设的 CMake 缓存和环境变量的摘要。现在,仅当消息日志级别设置为VERBOSE
、DEBUG
或TRACE
时,才通过cmake --log-level
选项或CMAKE_MESSAGE_LOG_LEVEL
缓存变量显示该摘要。预编译的 SunOS
sparc64
和x86_64
二进制文件现在在 cmake.org 上提供。