Qt Plugin插件开发指南(2)- 工程框架设计

Qt Plugin插件开发指南(2)- 工程框架设计

DateAuthorVersionNote
2021.03.14Dog TaoV1.0整理后发表。
2021.04.02Dog TaoV1.1.pro文件中复制文件的指令由system("copy XX YY")改为QMAKE_POST_LINK += "copy XX YY",并增加了相关的说明。

插件生成与调用管理

指定插件生成目录

例如,在工程文件(.pro)文件增加如下内容,指定生成库文件到目标文件夹中

		# 指定生成目录
    CONFIG(debug,debug|release)**{**
        DESTDIR = $$PWD/../../Plugins/debug
    }
    else{
        DESTDIR = $$PWD/../../Plugins/release
    }

指定接口文件目录

例如,在工程文件(.pro)文件增加如下内容,将接口文件复制到目标文件夹中

		InterfaceFile = $$PWD/imodbusrtumaster.h
    #将LibFile中的"/"替换为"\"
    InterfaceFile = $$replace(InterfaceFile, /, \\)

    #输出目录也是一样,要将"/"替换为"\"
    OutLibFile = $$PWD/../../Plugins/
    OutLibFile = $$replace(OutLibFile, /, \\)

    # QMAKE_POST_LINK表示编译后执行内容
    # QMAKE_PRE_LINK 表示编译前执行内容
    QMAKE_POST_LINK += "copy $$InterfaceFile $$OutLibFile"
    # system("copy $$InterfaceFile $$OutLibFile")

需要特别注意的是.pro文件中的使用QMAKE_PRE_LINKQMAKE_POST_LINK执行多条系统命令时,从第二条命令开始要加上“&&”作为分隔,否则会导致命令执行失败。例如:

#### Copy the interface file of the plugin to the folder ####
InterfaceFile = $$PWD/icurvechart.h
# 将LibFile中的"/"替换为"\"
InterfaceFile = $$replace(InterfaceFile, /, \\)

#### Copy the library of the plugin to the folder ####
LibraryFile = $$DESTDIR/EWhalesCurveChart.dll
# 将LibFile中的"/"替换为"\"
LibraryFile = $$replace(LibraryFile, /, \\)

# 输出目录也是一样,要将"/"替换为"\"
OutLibFile = $$QT_PROJ_ROOTDIR/Plugins/
OutLibFile = $$replace(OutLibFile, /, \\)

# QMAKE_POST_LINK表示编译后执行内容
# QMAKE_PRE_LINK 表示编译前执行内容
# system("copy $$InterfaceFile $$OutLibFile")
QMAKE_POST_LINK += "copy $$InterfaceFile $$OutLibFile"
# system("copy $$LibraryFile $$OutLibFile")
QMAKE_POST_LINK += "&& copy $$LibraryFile $$OutLibFile"

插件开发与测试(Qt子工程)

一般情况下,我们开发插件时都需要一个配套的测试程序。此时利用Qt的子工程机制,将插件工程与测试工程作为子工程可以比较合适的完成此目标。一般步骤如下所示:

创建主工程

TEMPLATE = subdirs

SUBDIRS += $$PWD/EWhalesPlugin_CurveChart/source/EWhalesPlugin_CurveChart.pro \
           $$PWD/CurveChartPluginTest/source/CurveChartPluginTest.pro \

CurveChartPluginTest.depends = EWhalesPlugin_CurveChart

CONFIG += ordered

TEMPLATE = subdirs表明这是个工程集。

SUBDIRS = EWhalesPlugin_CurveChart CurveChartPluginTest将插件开发工程与插件测试工程作为子工程包含进来。

CurveChartPluginTest.depends = EWhalesPlugin_CurveChartEWhalesPlugin_CurveChart(生成插件)作为CurveChartPluginTest(调用插件)的依赖项

CONFIG += ordered使用subdirs模板时,此选项指定应该按照目录列表的顺序处理它们(注意此项设置是一个有争议的内容)。 [Ref. 1] [Ref. 2]

设置插件开发项目

与第一章节介绍的类似,设置插件的输出路径,以方便测试工程调用。

CONFIG(debug,debug|release){
    DESTDIR = $$PWD/../../bin/debug/plugins
}
else{
    DESTDIR = $$PWD/../../bin/release/plugins
}

设置插件测试项目

设置可执行文件输出到插件生成目录中,并添加接口文件。

CONFIG(debug,debug|release){
    DESTDIR = $$PWD/../../bin/debug
}
else{
    DESTDIR = $$PWD/../../bin/release
}

INCLUDEPATH += ../../EWhalesPlugin_CurveChart/source

执行主工程

注意不要分别执行子工程的Release、Debug等操作,应当直接在主工程中执行编译、运行操作。

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

全能骑士涛锅锅

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值