1.模块分割
为了方便模块化与团队开发管理,需要将工程进行切分,主思想是主exe分别调用各个dll,故需要进行工程分割
2.Dll子工程
以下以Credit支付工程举例:
Credit => include(文件夹)
=> credit.h
=> credit_global.h (Qt创建动态库时,自己使生的文件,也可以将它合并到credit.h里面去)
=> src (文件夹)
=> credit_private.h
=> credit_private.cpp
=> lib(文件夹:dll与a文件的存放点)
=> Credit.pro 工程文件
针对工程文件需要注意的地方,为了能区分出debug与release版本,这里加入以下的内容 :
CONFIG+=debug_and_release
CONFIG(debug, debug|release){
TARGET = Creditd
} else {
TARGET = Credit
}
为了能将dll与a文件的存放到上面的lib文件夹,工程文件加入以下内容:
# $$PWD/这个表示pro文件的目录,这里指定生成的.dll文件与.a文件的路径
DESTDIR = $$PWD/lib
这样,debug与release编译后,dll与a文件将自动放于lib文件夹下
3. exe程序的工程
这里为了方便,假设将Credit放于主程序MainCredit下,目录组成为
MainCredit => Credit => include
=> lib
=> main.cpp
=> MainCredit.pro
首先将Credit的库加入到 MainCredit.pro 工程中,使用QtCreater的右键-》添加库,先好lib文件夹下的库文件即可;
这里要解决的问题是,每次Credit编译后,总是需要人工将lib里面的dll复制到 exe所在的文件夹内,很容易出错,这里抛砖引玉地说一下,暂时探到的方法,在MainCredit.pro加入以下内容, 编译链接时,将会把dll都复制到运行目录下:

但这里发现,这QMake_POST_LINK并不是每次编译都会执行,这需要main.cpp这类的代码变化过,才会执行的,没想法好方法,这里取了个巧,在main.cpp里面加入了以下的代码:(PS:如果以后有好的方法,再修正了 >. < )
//运行程序时,就删掉main.o
//让程序下一次编译时,执行pro里面的 QMAKE_POST_LINK 的内容,保证库文件一定时使用最新的
// by csq.Tom 2018/04/04
{
QString mainFile = QApplication::applicationDirPath()+"/main.o";
QFile file(mainFile);
if (file.exists())
{
file.remove();
}
}