qt_add_plugin

创建 Qt 插件目标。

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

find_package(Qt6 REQUIRED COMPONENTS Core)

此命令自 Qt 6.0 版本开始引入。

摘要

qt_add_plugin(target
              [SHARED | STATIC]
              [CLASS_NAME class_name]
              [OUTPUT_TARGETS variable_name]
              [MANUAL_FINALIZATION]
              sources...
)

MANUAL_FINALIZATION 选项和设置源的能力是从 Qt 6.5 版本中引入的。

如果禁用了无版本命令,请使用 qt6_add_plugin() 代替。它支持与该命令相同的参数集合。

描述

Qt 插件目标除了普通 CMake 库目标之外还有额外的要求。`qt_add_plugin()` 命令添加了必要的处理,以确保满足这些要求。当定义 Qt 插件目标时,应调用此命令而不是内置的 CMake `add_library()` 命令。

默认情况下,如果 Qt 以静态方式构建,则插件将创建为 STATIC 库,否则将创建为 MODULE 库。您可以通过显式提供 STATICSHARED 选项来覆盖此默认设置。

提供的任何 sources 都将通过内部对 add_library() 的调用传递。

注意:非静态插件旨在在运行时动态加载,而不是在构建时链接。CMake 通过提供动态加载库的 MODULE 库类型和对可能直接链接的库的 SHARED 库类型来区分这两种场景。在处理符号导出时,这一点对某些工具链(特别是 Visual Studio)很重要。可能无法直接链接到 MODULE 库,而没有导出符号的 SHARED 库可能会导致构建时错误。如果将 SHARED 选项传递给 qt_add_plugin(),则它将创建一个 MODULE 库而不是 SHARED 库。

每个 Qt 插件都有一个类名。默认情况下,这将与 target 相同,但可以通过 CLASS_NAME 选项来覆盖。类名对应于声明插件元数据的 C++ 类的名称。对于静态插件,它也是传递给 Q_IMPORT_PLUGIN 的名称,这会将插件导入应用程序并在运行时确保它可用。

如果插件是静态构建的,qt_add_plugin()可能会定义额外的内部目标。这些目标便于自动导入任何链接到插件的可执行文件或共享库。如果项目安装了插件并打算使其可供其他项目链接,则应安装这些内部目标。可以通过提供OUTPUT_TARGETS选项,然后是返回目标列表的变量的名称来获取这些目标的名称。

最终化

创建目标后,可能需要进行进一步的加工或最终化步骤。最终化步骤通过qt_finalize_target()命令实现。

有关详细信息和MANUAL_FINALIZATION选项的含义,请参阅qt_add_library最终化文档

另请参阅qt_finalize_target()qt_add_executable()

© 2024 Qt公司有限公司。本文件内包含的文档贡献者的版权所有。本文件的文档受GNU自由文档许可证版本1.3的许可条款约束,由自由软件基金会发布。Qt及其相关标志是芬兰及世界其他地区Qt公司有限公司的商标。所有其他商标均为其各自所有者的财产。