qt_add_qml_plugin
概述
qt_add_qml_plugin( target [BACKING_TARGET backing_target] [STATIC | SHARED] [OUTPUT_DIRECTORY] [URI] [CLASS_NAME] [NO_GENERATE_PLUGIN_SOURCE] [NAMESPACE namespace] )
如果禁用了无版本命令,请使用 qt6_add_qml_plugin()
替代。它支持与该命令相同的参数集。
描述
此命令创建与 QML 模块相关联的插件目标。通常由 qt_add_qml_module() 内部调用以创建或更新与其支持的插件。除非你有特殊情况需要以特殊方式创建目标,否则你不应该直接调用此函数。
qt_add_qml_module() 的文档描述了如何安排与一个 QML 模块关联的 CMake 目标的不同结构模式。请注意,即使 QML 模块没有独立的支持目标且所有功能都直接在插件(非推荐安排)中实现,你也应该调用 qt_add_qml_module() 而不是 qt_add_qml_plugin()
。
参数
target
指定了用于 QML 插件的的目标名称。如果它尚未存在,它将被创建。
BACKING_TARGET
指定了插件相关联的支持目标名称。支持目标可以与插件 target
相同,在这种情况下,只有一个合并后的目标,但这通常不推荐(更多信息请参阅 qt_add_qml_module())。通常情况下,应该提供 BACKING_TARGET
,除非有特殊情况需要先创建插件目标再创建支持目标。如果没有提供 BACKING_TARGET
,则必须提供 URI
选项。
默认情况下,插件将创建与支持目标兼容的类型。如果支持目标是静态库,则插件也将作为静态库创建。如果支持目标是动态库,则插件将作为模块库创建。如果没有提供支持目标或插件没有独立的支持目标,则可以使用 STATIC
或 SHARED
关键字指定插件类型。如果插件类型没有被前面的任何条件确定,如果在构建 Qt 时构建了静态库,则创建静态插件,否则创建模块库插件。
OUTPUT_DIRECTORY
指定插件库将被创建的目录。它应该始终与QML模块的qmldir文件位于同一位置。如果没有指定OUTPUT_DIRECTORY
,将尝试从存储在BACKING_TARGET
上的信息中获取,如果有的话。请注意,这可能与备份目标的库目录不同。如果无法从备份目标获得输出目录,则默认使用CMAKE_CURRENT_BINARY_DIR
。
URI
声明与插件关联的QML模块的模块标识符。模块标识符是为QML模块的(点分隔URI表示法)标识符。如果没有指定URI
,则必须提供BACKING_TARGET,并且备份目标必须在上面记录其URI(通常通过早期调用qt_add_qml_module())。
每个插件都应该有一个用于将模块与QML引擎注册的C++类。默认情况下,qt_add_qml_plugin()
会自动生成这个C++类的源代码,并将它们添加到target
的源代码列表中。生成的插件类满足插件可选性的要求(见模块定义qmldir文件)。类的名称按以下方式确定
- 如果给出了
CLASS_NAME
,则将使用它。它必须与QML模块的qmldir
文件中使用的名称匹配。 - 如果没有给定
CLASS_NAME
,但给出了BACKING_TARGET
,C++类名将从备份目标上记录的详细信息中获得。这些详细信息通常是通过早期调用qt_add_qml_module()来记录的,并且它们将与生成的qmldir
文件中使用的名称匹配。这是在大多数情况下推荐提供类名的方式。 - 如果仍然不能确定类名,它将设置为模块的URI,点被下划线替换,并附加
Plugin
。
如果给出了与NAMESPACE
关键字一起的命名空间,插件代码将生成到具有此名称的C++命名空间中。
某些插件可能需要手动编写插件类。例如,插件可能需要执行额外的初始化或注册默认插件类未实现的事物。在这种情况下,可以给出NO_GENERATE_PLUGIN_SOURCE
选项。然后,您需要负责编写自己的C++插件类并将其添加到target
。请注意,如果您需要编写自己的插件类,插件很可能不可选。这反过来意味着在定义QML模块时,应该在qt_add_qml_module()调用中包含NO_PLUGIN_OPTIONAL
关键字,否则生成的qmldir
文件将是不正确的。确保您的插件类使用与上面逻辑中确定的相同的类名。
© 2024 Qt公司有限公司。此处包含的文档贡献是各自所有者的版权。此处提供的文档是根据自由软件基金会发布的GNU自由文档许可版1.3的条款许可的。Qt和相关标志是芬兰和/或其他国家和地区Qt公司有限公司的商标。所有其他商标均为其各自所有者的财产。