CMake 3.27 发行说明¶
自 CMake 3.26 以来所做的变更内容包括:
新特性¶
调试器¶
cmake(1)
现在支持 CMake 语言的交互调试。请参阅--debugger
选项。
预设值¶
cmake-presets(7)
文件现在支持模式版本7
。cmake-presets(7)
现在支持在include
域中进行$penv{}
宏扩展。
生成器¶
Makefile 和 Ninja 生成器现在支持使用由 GNU Binutils 2.35 和 LLVM 的 LLD 12.0.0 添加的
--dependency-file
链接器标志,以便在链接器读取的文件变更时(通常是修改的时间戳)触发重新链接。请参阅CMAKE_LINK_DEPENDS_USE_LINKER
变量。VS 14 (2015) 及更高版本的 Visual Studio Generators 已学会使用
CMAKE_GENERATOR_PLATFORM
变量中的version=
字段显式选择 Windows SDK 版本。请参见 Visual Studio Platform Selection。
Languages¶
CXX
语言现在将源文件扩展名.ccm
、.cxxm
和.c++m
视为 C++。
File-Based API¶
cmake-file-api(7)
“codemodel” 版本 2version
字段已更新至 2.6。cmake-file-api(7)
“codemodel” 版本 2 “target” 对象在 “compileGroups” 对象中获得了一个新的 “frameworks” 字段。
Platforms¶
现在可以在 macOS 上为共享库创建基于 Apple 文本的存根(即
.tbd
文件)。请参见ENABLE_EXPORTS
属性。
Commands¶
add_custom_command()
命令获得了一个新的DEPENDS_EXPLICIT_ONLY
选项,告诉 Ninja Generators 不要添加由已连接的目标隐含的任何依赖项。CMAKE_ADD_CUSTOM_COMMAND_DEPENDS_EXPLICIT_ONLY
变量已添加,以便在对add_custom_command()
命令的所有调用中启用DEPENDS_EXPLICIT_ONLY
。添加
CMake file API
查询当前 CMake 运行的cmake_file_api()
命令。现在
find_package()
命令搜索大写<PACKAGENAME>_ROOT
CMake 变量和大写<PACKAGENAME>_ROOT
环境变量指定的路径前缀。请参阅策略CMP0144
。现在
install(CODE)
和install(SCRIPT)
命令支持$<INSTALL_PREFIX>
生成器表达式。
变量¶
添加
CMAKE_DLL_NAME_WITH_SOVERSION
变量和相关DLL_NAME_WITH_SOVERSION
目标属性,以可选追加SOVERSION
到 Windows 中共享库的.dll
部分文件名。添加变量
CMAKE_VS_DEBUGGER_COMMAND
、CMAKE_VS_DEBUGGER_COMMAND_ARGUMENTS
、CMAKE_VS_DEBUGGER_ENVIRONMENT
和CMAKE_VS_DEBUGGER_WORKING_DIRECTORY
以初始化对应目标属性。CMAKE_VS_WINDOWS_TARGET_PLATFORM_MIN_VERSION
根据创建时初始化VS_WINDOWS_TARGET_PLATFORM_MIN_VERSION
目标属性。
属性¶
向 对象库 添加
CUDA_CUBIN_COMPILATION
目标属性来支持编译.cubin
文件而不是主机对象文件。目前仅受 NVIDIA 支持。向 对象库 添加
CUDA_FATBIN_COMPILATION
目标属性来支持编译.fatbin
文件而不是主机对象文件。目前仅受 NVIDIA 支持。向 对象库 添加
CUDA_OPTIX_COMPILATION
目标属性来支持编译.optixir
文件而不是主机对象文件。目前仅受 NVIDIA 支持。现在,
<LANG>_CLANG_TIDY
、<LANG>_CPPCHECK
、<LANG>_CPPLINT
和<LANG>_INCLUDE_WHAT_YOU_USE
目标属性支持生成器 表达式
。<LANG>_LINKER_LAUNCHER
目标属性现在支持生成器 表达式
。SKIP_LINTING
源文件属性被用来抑制目标代码对特定源文件进行全面检查。
模块¶
FindCUDAToolkit
模块现在为cudla
提供一个导入目标,并为 CUPTI 的nvperf
和pcsampling
组件提供导入目标。FindDoxygen
模块的doxygen_add_docs()
命令添加了一个CONFIG_FILE
选项以指定一个自定义 doxygen 配置文件。FindOpenGL
模块添加了对组件GLES2
和GLES3
的支持。FindwxWidgets
模块现在提供导入目标。
生成器表达式¶
COMPILE_ONLY
生成器表达式被添加用于指定编译使用要求,而无任何链接要求。添加了
TARGET_IMPORT_FILE
、TARGET_IMPORT_FILE_BASE_NAME
、TARGET_IMPORT_FILE_PREFIX
、TARGET_IMPORT_FILE_SUFFIX
、TARGET_IMPORT_FILE_NAME
和TARGET_IMPORT_FILE_DIR
生成器表达式。这些表达式将扩展为有关目标的链接器导入文件。的详细信息。添加了
TARGET_RUNTIME_DLL_DIRS
生成器表达式。它扩展为包含TARGET_RUNTIME_DLLS
中的 DLL 的目录列表。
自动生成¶
增加了
CMAKE_AUTOMOC_EXECUTABLE
、CMAKE_AUTORCC_EXECUTABLE
和CMAKE_AUTOUIC_EXECUTABLE
变量,以便在创建目标时初始化对应的目标属性。AUTOGEN_USE_SYSTEM_INCLUDE
目标属性和对应的CMAKE_AUTOGEN_USE_SYSTEM_INCLUDE
变量被添加,以明确控制是否把自动生成头文件视为系统头文件。INTERFACE_AUTOMOC_MACRO_NAMES
目标属性被添加,以指定moc
的宏名称,作为可传递使用要求。
CTest¶
TIMEOUT_SIGNAL_NAME
和TIMEOUT_SIGNAL_GRACE_PERIOD
测试属性被添加,以指定超时后发送给测试进程的 POSIX 信号。
CPack¶
CPack Inno Setup Generator
被添加,以使用 Inno Setup 打包。
已弃用和移除功能¶
现在已弃用与低于 3.5 版本的 CMake 的兼容性,并且将来会从新版本中移除。调用
cmake_minimum_required()
或cmake_policy()
将策略版本设置为较旧值,现在会发出弃用警告。额外生成器 已被弃用。IDE 可能会使用
cmake-file-api(7)
查看由 CMake 生成的项目构建树。自 CMake 3.10 起已弃用的
FindCUDA
模块已被策略CMP0146
移除。将项目移植到 CMake 一流的CUDA
语言支持。自 CMake 3.12 已弃用的
FindPythonInterp
和FindPythonLibs
模块已由策略CMP0148
删除。将项目移植至FindPython3
、FindPython2
或FindPython
。现在已弃用
Visual Studio 9 2008
生成器,它将从未来版本的 CMake 中删除。
其他更改¶
cmake --build $dir --verbose
现在将打印执行构建所用的工作目录和命令行。当启用
UPDATE_DISCONNECTED
选项时,ExternalProject
和FetchContent
模块现在将相对GIT_REPOSITORY
路径解析为父项目远程文件的相对路径,而不是相对本地文件系统路径。请参见CMP0150
。在启用
UPDATE_DISCONNECTED
选项时,ExternalProject
configure
步骤不再在每次构建时重新运行。仅在download
、update
或patch
步骤的详情发生变化时,它才会重新运行。现在,即使启用了
UPDATE_DISCONNECTED
选项,ExternalProject
的update
与patch
步骤也会在任何详细信息更改后重新运行。如果使用GIT
下载方法,并且GIT_TAG
更改为本地尚未知的提交,则现在会发出错误,而不是在不知不觉间使用之前的GIT_TAG
。FindPython
、FindPython2
和FindPython3
模块现在支持 Windows ARM64 平台。file(GET_RUNTIME_DEPENDENCIES)
命令现在保留 Windows 上报告的 DLL 名称的大小写。仍会将其转换为小写以进行筛选匹配。SYSTEM
目标属性现在适用于 Apple Frameworks。Visual Studio 生成器,适用于 VS 15.8(2017)及更高版本,现在会并行构建自定义命令。请参阅策略
CMP0147
。Visual Studio 生成器,适用于 VS 14(2015)及更高版本,现在更愿意选择最新的 Windows SDK 版本。请参阅策略
CMP0149
。
更新¶
自 CMake 3.27.0 以来所做的更改包括以下内容。
3.27.1¶
此版本未对已记录功能或界面进行任何更改。已对一些实现进行更新,以支持生态系统更改和/或修复回归。
3.27.2¶
Visual Studio 生成器,适用于 VS 14(2015)及更高版本,现在更愿意选择最新的 Windows SDK(策略
CMP0149
中记录),以定位任何 Windows 版本。在 CMake 3.27.[0-1] 中,此优先选择仅限于定位 Windows 10 及更高版本。Visual Studio 生成器(适用于 VS 14(2015)及以上版本)现在支持在
CMAKE_GENERATOR_PLATFORM
变量中使用version=8.1
以选择 Windows 8.1 SDK。在 CMake 3.27.[0-1] 中,version=
字段仅限于选择 Windows 10 SDK。
3.27.3、3.27.4、3.27.5、3.27.6、3.27.7、3.27.8¶
这些版本未对记录的功能或界面进行任何更改。进行了一些实现更新以支持生态系统更改和/或修复回归。
3.27.9¶
cmake-file-api(7)
“codemodel” 2 版“target”对象fileSets
字段由 CMake 3.26.0 引入,其baseDirectories
成员的条目被不正确地表示为绝对路径,即使它们位于顶级源目录中。此问题已在 CMake 3.26.6 中修复,并已在 3.27.9 中修复。必须更新客户端以在顶级源目录下预留相对路径。Fortran 模块依赖关系扫描在 Ninja 生成器 中已由 CMake 3.27.0 更新为使用完全比对的依赖关系。当在目标之间移动模块源时,这应该可以修复微妙的重新构建失败。自此,已发现了在使用 对象库 时错误计算完全比对的依赖关系的多个案例。其中一些案例已通过 3.27.x 补丁系列逐步修复,但后来又发现了一些更加微妙的案例。为了避免在 3.27 发行版系列中发生进一步的彻底改变,原始更改已被还原并推迟到 CMake 的未来版本。