转自:https://blog.csdn.net/lusanshui/article/details/99637472
引言
本文的编写目的是希望读者可以学会:
1、在Qt下创建多工程项目;
2、创建编写的动态库程序;
3、集成使用第三方或自己编写的动态库;
4、对qmake和.pro文件有初步的认识。
下面开始吧!
多工程项目
应用程序在向多进程多动态库方向发展。多工程项目听着很高大上,其实和创建正常的单进程项目一样的简单。区别仅在于创建工程类型的选择和重复创建工程的次数不同。
在Qt下创建多工程的步骤如下:
点击菜单栏“文件”–>“新建文件或项目”–>“其它项目”–>“子项目目录”–>一路确定;
右击创建好的目录项目–>“新建子项目”–>选择创建 Widgets Application、Console Application或C++库项目;
重复步骤2,重复几次即加入了多少个工程项目。
这种多进程工程好处很多,至少在编程时,逻辑和条理更为清晰,系统耦合性更低。比如可以把守护进程、工具库和主界面进程分别放在三个工程中,每个进程相互独立,不影响主进程的稳定性,进程崩溃也没关系,可以通过守护进程去自动启动。
下图中ZRFrame工程包含了三个子项目,守护进程WatchExe、主界面框架ZRFrame、工具库ZRQtLibrary.
创建动态库程序
动态库程序的输出是.lib和.dll文件,可以实现纯C++的一些算法方法,也可以是带信号槽的界面。由于动态库的目的是供其它进程方便的使用,故只需编译后即可生成,比一般的应用程序简单一些。
动态连接库也叫做共享库,创建步骤如下:
“新建项目”–>“Library”–>“C++库”;
在源文件和头文件中编写函数即可。
创建很简单,但有写地方必须要说明一下,不然使用起来可能会遇到问题。
1)在.pro文件中设置输出库文件的路径。
多工程项目中,最好在.pro文件中加入生成库路径:DESTDIR = …/bin,这句话表示把库文件生成在目录的上级的bin文件下中(bin文件不存在会自动创建),这样其它工程使用库的时候从这个目录下取即可。
2)生成带信号槽界面的库程序
由于界面、信号槽均与moc文件有关,需要把xx_global.h中的Q_DECL_IMPORT字符删去,这样调用此dll的程序会自己生成moc文件,否则调用动态库时会报“C2491:xx::staticMetaObject:不允许dllimport静态数据成员”的错误。
调用动态库
调用动态库需要三类元素:头文件、.lib文件和.dll文件,让调用的工程知道这三类文件的位置即可,一般可以通过修改调用工程程序的.pro文件实现。步骤如下:
pro文件中添加LIBS属性: LIBS += -Lxx -lXX,其中-L后面是库文件的目录,-l后面是.lib文件的名称,名称不要带有后缀。
pro文件中添加库的头文件:INCLUDEPATH += $$PWD/XX,这里设置了库文件头文件所在的文件夹。
在需要调用动态库的类中include头文件,即可正常使用库中的类和方法了。
Pro文件
Qt中用qmake工具对pro文件进行编译,生成makefile文件,之后再进行make操作。
DESTDIR参数表示生成应用程序的放置目录;
LIBS参数表示需要导入的库文件的路径和名称;
INCLUDEPATH参数表示程序编译时依赖的相关路径。
结束语
本文的配图非常的少,可能不太利于读者的理解,但每句话都是作者查询各种资料并实践验证通过后的总结,相信可以帮助到一部分的读者,欢迎和我讨论交流。
————————————————
版权声明:本文为CSDN博主「lusanshui」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/lusanshui/article/details/99637472