1阅虫、代碼目錄結(jié)構(gòu)
1.1、主要的文件結(jié)構(gòu)如下:
_
│
│ 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 目錄存放編譯生成的庫、插件和執(zhí)行程序窝革,包含bin文件夾和libs文件夾:
- bin 文件存放可執(zhí)行程序和它執(zhí)行時要用到的庫及插件的dll動態(tài)鏈接庫文件购城,用于最后的打包
- libs 文件存放插件和庫所生成的靜態(tài)鏈接庫 .a 文件,用于程序編譯
1.3 src代碼文件目錄
src 目錄存放代碼虐译,包含app瘪板、libs、plugins文件夾:
- app 為主函數(shù)main.cpp的子目錄項目
- libs 為插件框架和常用工具的子目錄項目
- plugins 存放各種插件子項目
2漆诽、項目和子項目
2.1侮攀、 主項目MonkeyQDK.pro
該文件描述下級src子目錄項目锣枝,內(nèi)容如下:
TEMPLATE = subdirs
CONFIG += ordered
SUBDIRS += \
src
- TEMPLATE 標(biāo)識項目的模板類型如子目錄項目、application程序兰英、lib庫項目撇叁,這里表示為子目錄項目;詳細(xì)解釋:https://doc.qt.io/qt-5/qmake-variable-reference.html#template
- CONFIG += ordered 標(biāo)識編譯時按順序處理畦贸,主要處理子項目之間有依賴關(guān)系
- SUBDIRS 標(biāo)識下級的子目錄項目陨闹,建議文件夾和pro文件名字相同,詳細(xì)文檔:https://doc.qt.io/qt-5/qmake-variable-reference.html#subdirs
2.2薄坏、MonkeyMDK.pri 文件
該文件定義項目常用的變量趋厉,如輸出路徑、庫路徑等颤殴,是項目公共的觅廓,可以在其他子目錄項目進(jìn)行包含使用,內(nèi)容如下:
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 及它要用的動態(tài)鏈接庫 .dll 文件路徑涵但、編譯時候的靜態(tài)庫 .a 文件路徑杈绸、插件 .dll 文件路徑路徑;這里的 $PWD 表示 pro 或 pri 文件所在目錄矮瘟,這里即 MonkeyMDK.pri 文件所在的當(dāng)前目錄瞳脓;
- 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 標(biāo)識項目要鏈接的庫路徑。
- plugins.pri 中定義插件生成的路徑:
include(../MonkeyQDK.pri)
TEMPLATE = lib
DLLDESTDIR = $ $APP_OUT_PATH/plugins
DESTDIR = $ $APP_LIBS_PATH
LIBS += -L$ $DESTDIR
DLLDESTDIR 標(biāo)識插件的目錄祝峻,這里標(biāo)識最后生成時把插件放置到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 += 標(biāo)識要用到的 Qt 庫酬姆;
- TARGET 定義生成的名字,這里即為 exe 文件名奥溺;
- SOURCES 為源文件辞色;
- DESTDIR 指定輸出目錄,這里為 exe 路徑浮定,
APP_OUT_PATH引用了 pri 文件中定義的路徑變量
2.5淫僻、庫libs子目錄項目
這個子項目放置要用的庫項目诱篷,如核心的插件框架庫extensionsystem、常用工具庫utils等雳灵,pro文件內(nèi)容如下:
TEMPLATE = subdirs
CONFIG += ordered
SUBDIRS += \
utils \
extensionsystem
- extensionsystem 子項目就是要用到的插件框架項目,包含了插件接口闸盔、插件管理悯辙、加載等功能;
- utils 子項目則存放常用的工具迎吵,如算法躲撰、json、字符串處理等击费;
2.6拢蛋、插件plugins子目錄項目
這個子目錄項目存放核心插件 coreplugin和用戶添加的其他各種插件,這樣和app一起組成插件形式的程序蔫巩,pro文件如下:
TEMPLATE = subdirsSUBDIRS += \ coreplugin
- coreplugin 就是核心插件項目谆棱,一般的主界面開始加載就在這里調(diào)用。