QtCreator插件框架学习01-目录结构

1、代码目录结构

1.1、主要的文件结构如下:
_  
│
│   MonkeyQDK.pri
│   MonkeyQDK.pro
├───build
│   ├───bin
│   │   │   extensionsystem.dll
│   │   │   MonkayQDK.exe
│   │   │   utils.dll
│   │   │   
│   │   └───plugins
│   │           coreplugin.dll
│   │           
│   └───libs
│           coreplugin.dll
│           extensionsystem.dll
│           libcoreplugin.a
│           libextensionsystem.a
│           libutils.a
│           utils.dll
│           
└───src
    │   libs.pri
    │   plugins.pri
    │   src.pro
    │   
    ├───app
    │       app.pro
    │       main.cpp
    │       
    ├───libs
    │   │   libs.pro
    │   │       
    │   ├───extensionsystem
    │   │       extensionsystem.pro
    │   │       
    │   └───utils
    │               
    └───plugins
        │   plugins.pro
        │   
        └───coreplugin
                coreplugin.pro
  • MonkeyQDK.pro 文件是项目主文件
  • MonkeyQDK.pri 文件是辅助定义输出目录、库路径等变量
1.2、build目录

build 目录存放编译生成的库、插件和执行程序,包含bin文件夹和libs文件夹:

  • bin 文件存放可执行程序和它执行时要用到的库及插件的dll动态链接库文件,用于最后的打包
  • libs 文件存放插件和库所生成的静态链接库 .a 文件,用于程序编译
1.3 src代码文件目录

src 目录存放代码,包含app、libs、plugins文件夹:

  • app 为主函数main.cpp的子目录项目
  • libs 为插件框架和常用工具的子目录项目
  • plugins 存放各种插件子项目

2、项目和子项目

2.1、 主项目MonkeyQDK.pro

该文件描述下级src子目录项目,内容如下:

TEMPLATE = subdirs

CONFIG += ordered

SUBDIRS += \
    src
  • TEMPLATE 标识项目的模板类型如子目录项目、application程序、lib库项目,这里表示为子目录项目;详细解释:https://doc.qt.io/qt-5/qmake-variable-reference.html#template
  • CONFIG += ordered 标识编译时按顺序处理,主要处理子项目之间有依赖关系
  • SUBDIRS 标识下级的子目录项目,建议文件夹和pro文件名字相同,详细文档:https://doc.qt.io/qt-5/qmake-variable-reference.html#subdirs
2.2、MonkeyMDK.pri 文件

该文件定义项目常用的变量,如输出路径、库路径等,是项目公共的,可以在其他子目录项目进行包含使用,内容如下:

CONFIG += c++14

# app.exe and lib dll path
APP_OUT_PATH = $ $PWD/build/bin

# lib*.a path
APP_LIBS_PATH = $ $PWD/build/libs

# plugin dll path
APP_PLUGIN_PATH =  $ $PWD/build/bin/plugins

#lib include
INCLUDEPATH += $ $PWD/src/libs
DEPENDPATH  += $ $PWD/src/libs

上面变量定义了程序 .exe 及它要用的动态链接库 .dll 文件路径、编译时候的静态库 .a 文件路径、插件 .dll 文件路径路径;这里的 $PWD 表示 pro 或 pri 文件所在目录,这里即 MonkeyMDK.pri 文件所在的当前目录;

  • INCLUDEPATH 定义了编译要用的头文件目录
  • DEPENDPATH 用于添加qmake文件依赖
2.3、src 子目录项目

这里存放的代码源文件的项目,src.pro 文件如下:

TEMPLATE = subdirs

CONFIG += ordered

SUBDIRS += \
    libs \
    plugins \
    app \

包含库libs、插件plugins、主程序app项目。

  • libs.pri 中定义了库输出等路径:
include(../MonkeyQDK.pri)

TEMPLATE = lib

DLLDESTDIR = $ $APP_OUT_PATH

DESTDIR = $ $APP_LIBS_PATH

LIBS += -L$ $DESTDIR

include 包含了之前定义的pri文件,因为要用到输出路径的变量;其中 DLLDESTDIR 定义要把库 dll 文件拷贝的路径,DESTDIR 则指示库生成的 .a 和 .dll 文件输出路径,LIBS 标识项目要链接的库路径。

  • plugins.pri 中定义插件生成的路径:
include(../MonkeyQDK.pri)

TEMPLATE = lib

DLLDESTDIR = $ $APP_OUT_PATH/plugins

DESTDIR = $ $APP_LIBS_PATH

LIBS += -L$ $DESTDIR

DLLDESTDIR 标识插件的目录,这里标识最后生成时把插件放置到exe所在目录的plugins文件夹下。

2.4、主程序 app子项目

这个子项目为主程序main的项目,项目pro文件如下:

include(../../MonkeyQDK.pri)

QT += core gui widgets

TEMPLATE = app

TARGET = MonkayQDK

SOURCES += \
    main.cpp

DESTDIR = $ $APP_OUT_PATH
  • QT += 标识要用到的 Qt 库;
  • TARGET 定义生成的名字,这里即为 exe 文件名;
  • SOURCES 为源文件;
  • DESTDIR 指定输出目录,这里为 exe 路径,APP_OUT_PATH引用了 pri 文件中定义的路径变量
2.5、库libs子目录项目

这个子项目放置要用的库项目,如核心的插件框架库extensionsystem、常用工具库utils等,pro文件内容如下:

TEMPLATE = subdirs

CONFIG += ordered

SUBDIRS += \
    utils \
    extensionsystem
  • extensionsystem 子项目就是要用到的插件框架项目,包含了插件接口、插件管理、加载等功能;
  • utils 子项目则存放常用的工具,如算法、json、字符串处理等;
2.6、插件plugins子目录项目

这个子目录项目存放核心插件 coreplugin和用户添加的其他各种插件,这样和app一起组成插件形式的程序,pro文件如下:

TEMPLATE = subdirsSUBDIRS += \    coreplugin
  • coreplugin 就是核心插件项目,一般的主界面开始加载就在这里调用。

你可能感兴趣的:(QtCreator插件框架学习01-目录结构)