本页内容

qt_set_finalizer_mode

用于自定义目标对象的终结处理相关设置。

该命令定义在Qt6 包的Core 组件中,可按如下方式加载:

find_package(Qt6 REQUIRED COMPONENTS Core)

该命令于 Qt 6.2 版本中引入。

注意:此 命令处于技术预览阶段,未来版本中可能会发生变化。

语法

qt_set_finalizer_mode(target
    ENABLE | DISABLE
    MODES modes...
)

如果禁用了无版本号的命令,请改用qt6_set_finalizer_mode() 。它支持与本命令相同的参数集。

描述

此命令用于自定义特定target 的最终处理过程的某些方面。只有在target 被最终处理之前调用此命令,它才会生效,而最终处理通常发生在以下任一场景中:

  • 项目为该target 显式调用了qt_finalize_target()。这通常意味着在定义target 时,已将MANUAL_FINALIZATION 关键字作为参数传递给了qt_add_executable()。
  • 使用 CMake 3.17 或更早版本,在这种情况下,终止处理总会作为调用qt_add_executable() 的一部分立即发生。
  • 正在使用 CMake 3.18 或更高版本,且在定义target 时未向qt_add_executable()传递MANUAL_FINALIZATION 关键字,并且延迟终结已在target 的目录作用域结束时完成。

qt_set_finalizer_mode() 用于启用或禁用一组模式,其中每种模式对应清理过程的特定方面。当前支持的清理模式包括:

模式默认值终结行为
static_plugins启用当 Qt 以静态方式构建时,它会为其静态插件创建初始化对象库。如果target 是可执行文件且此终结模式已启用,则target 所需的任何插件初始化对象库都将直接链接到该可执行文件。这可防止 Qt 提供的静态库之间产生循环,并可能缩短链接时间。 当此终结器模式被禁用时,每个插件初始化器将通过其关联的 Qt 库的使用要求进行传播,这可能会导致循环引用。如果 Qt 不是以静态方式构建的,则此终结器模式不适用且不会被使用。

示例

以下示例假设您使用的是 CMake 3.19 或更高版本(延迟终结功能需要此版本):

qt_add_executable(my_app main.cpp)
qt_set_finalizer_mode(my_app ENABLE MODES static_plugins)

使用手动终结处理的同类示例可能如下所示:

qt_add_executable(my_app MANUAL_FINALIZATION main.cpp)
qt_set_finalizer_mode(my_app ENABLE MODES static_plugins)
qt_finalize_target(my_app)

另请参阅 qt_finalize_target()。

© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.