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()

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