本页内容

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 库创建。您可以通过显式提供STATIC 或SHARED 选项来覆盖此默认行为。

提供的任何sources 参数都将被传递给内部调用的add_library() 函数。

注意:非静态 插件旨在运行时动态加载,而非在构建时进行链接。CMake 通过为动态加载的库提供MODULE 库类型,以及为可能被直接链接的库提供SHARED 库类型,来区分这两种情况。 对于某些工具链(尤其是 Visual Studio),由于符号导出的处理方式不同,这一区分至关重要。可能无法链接到MODULE 类型的库,而生成一个不包含导出符号的SHARED 库可能会导致构建时错误。因此,如果向qt_add_plugin() 传递SHARED 选项,它将生成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()。

© 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.