CMake 4.0 发行说明¶
自 CMake 3.31 以来的更改包括以下内容。
新功能¶
基于文件的 API¶
cmake-file-api(7)"codemodel" 版本 2version字段已更新为 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_UNITY_BUILD_RELOCATABLE变量和相应的UNITY_BUILD_RELOCATABLE目标属性,以使为CMAKE_UNITY_BUILD生成的源文件尽可能使用相对路径#include原始源文件。添加了
CMAKE_XCODE_SCHEME_LLDB_INIT_FILE变量和相应的XCODE_SCHEME_LLDB_INIT_FILE目标属性,用于告诉Xcode生成器在方案的“LLDB Init File”设置中放置什么。添加了
CMAKE_XCODE_SCHEME_TEST_CONFIGURATION变量和相应的XCODE_SCHEME_TEST_CONFIGURATION目标属性,用于告诉Xcode生成器在测试操作的方案“构建配置”设置中放置什么。
属性¶
添加了
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选项,用于在使用 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更新使其成为可能后删除的行为。
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 命令,除非CTEST_RUN_CURRENT_SCRIPT明确设置为OFF。ctest_run_script()命令不再允许在不带任何参数的情况下调用。
其他更改¶
在 macOS 上,使用 Ninja 生成器 和 Makefile 生成器 时,如果在
/usr/bin中找到编译器,则现在按原样使用它,不再映射到 Xcode 中相应的编译器。此映射由 CMake 3.2 引入,旨在允许构建树即使在xcode-select切换到不同的 Xcode 安装时也能继续使用其原始编译器。然而,Xcode 中的编译器无法在没有显式-isysroot标志的情况下使用,因此不适合传递给任意第三方构建系统。此外,映射行为可能会覆盖用户指定的编译器路径。因此,此行为已恢复。在针对 macOS 的构建中,
CMAKE_OSX_SYSROOT现在默认为空,将 macOS SDK 选择权交给编译器。为了通过编译器的-isysroot标志传递显式 macOS SDK,用户可以使用-DCMAKE_OSX_SYSROOT=macosx配置其构建树,或在其环境中export SDKROOT="$(xcrun --sdk macosx --show-sdk-path)"。备注
macOS 中
/usr/bin的编译器,当不带-isysroot调用时,会在系统 SDK 路径之前搜索/usr/local/include中的头文件,这与许多平台上的约定一致。macOS-x86_64 主机上安装了 Homebrew 在/usr/local中的用户,在不使用 Homebrew 工具构建时,应如上所述传递显式 SDK。某些 Clang 编译器没有默认的 macOS SDK 选择。对于这些编译器,如果
CMAKE_OSX_SYSROOT为空,CMake 将自动传递-isysroot和xcrun --show-sdk-path打印的 macOS SDK。
在 Windows 上,项目代码中命名的文件路径(例如
CMakeLists.txt中的路径)不再自动转换为其磁盘上的大小写。项目应使用其规范的大小写一致地拼写源文件路径,例如在调用add_library()、set_property(SOURCE)或set_source_files_properties()时。这与文件系统区分大小写的平台上的行为一致。在 AIX 上,
SHARED库目标现在默认生成共享库归档。参见策略CMP0182。cmake --preset命令现在默认不再输出预设的 CMake 缓存和环境变量摘要。该摘要现在仅在消息日志级别设置为VERBOSE、DEBUG或TRACE时显示,通过cmake --log-level选项或CMAKE_MESSAGE_LOG_LEVEL缓存变量。现在在 cmake.org 上提供了预编译的 SunOS
sparc64和x86_64二进制文件。
更新¶
自 CMake 4.0.0 以来的更改包括以下内容。
4.0.1¶
此版本未对文档功能或接口进行任何更改。进行了一些实现更新以支持生态系统更改和/或修复回归。
4.0.2¶
当为 macOS 构建时,如果使用的 Clang 没有默认的 macOS SDK,并且
CMAKE_OSX_SYSROOT为空,CMake 现在会自动传递-isysroot和xcrun --show-sdk-path打印的 macOS SDK。这恢复了在 macOS 上无需手动设置CMAKE_OSX_SYSROOT即可使用 LLVM/Clang 的支持,该支持在 CMake 4.0.0 移除默认值后被破坏。DEBUGGER_WORKING_DIRECTORY目标属性现在被Xcode生成器用作XCODE_SCHEME_WORKING_DIRECTORY目标属性的备用。
4.0.3¶
此版本未对文档功能或接口进行任何更改。进行了一些实现更新以支持生态系统更改和/或修复回归。