[英]How to manage the dependencies of custom Qt plugin (not for Qt Creator)?
我最近开始只是为了好玩而在Qt中使用插件。 我仍然不知道的一件事是如何定义和管理插件对其他插件(和库)的依赖关系。 我使用的是Plug&Paint示例 。
例如,当涉及到Qt Creator时 ,有两个变量可以处理此问题,即QTC_PLUGIN_DEPENDS
(用于依赖其他插件)和QTC_LIB_DEPENDS
(用于依赖特定库)。 例如,有VcsBase
(版本控制系统基础插件):
QTC_PLUGIN_NAME = VcsBase
QTC_LIB_DEPENDS += \ // <--------------------libraries the Qt Creator plugin depends on
aggregation \
cplusplus \
extensionsystem \
utils
QTC_PLUGIN_DEPENDS += \ //<-------------------other plugins the Qt Creator plugin depends on
coreplugin \
texteditor \
projectexplorer \
cpptools \
diffeditor
QTC_PLUGIN_RECOMMENDS += \
cpaster
如您所见,它具有多个库和插件依赖性。 根据我对IDE中所有这些的了解,所有插件至少都依赖于其他插件依赖项,即coreplugin
。 除此以外,其他插件还为依赖于这些插件的插件提供了部分功能。
继续示例,我们有Git
, SVN
等插件,它们都依赖于VcsBase
因为它们都依赖于该插件提供的功能。
我可以研究这两个变量,但我觉得应该有一种更好的方法,而不是仅筛选Qt Creator的代码(不完全适合初学者)。 我检查了QPluginLoader,但是与术语“ 依赖”相关的唯一东西是平台无关的 ,这不是我想要的。
“简单”的方法是检查所有可用的插件,然后-根据预定义的加载顺序-检查插件A和B是否可用,以便可以加载当前的插件C(取决于两者)。 但是,这意味着我需要将依赖项添加到核心应用程序。 我确实相信这是每个插件都需要自己(或多或少)照顾的事情。
似乎没有直接的方法可以做到这一点。 到目前为止,我发现的唯一方法是通过每个插件附带的JSON文件。 在那里可以输入一个密钥-我们称之为“ deps”-并通过QPluginLoader::metaData()
调用元数据。 此函数返回一个QJsonObject
(JSON文档的根。然后可以找到“ deps”并获取其内容(例如,当前插件所依赖的其他插件的名称列表)。下一个可以检查是否提到了该插件。存在和加载依赖项,依此类推。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.