中国公路建设行业协会网站,wordpress构建,网站建设免责申明书,精美图片做网站上哪儿去找图在开发一个软件项目时候#xff0c;当涉及到一个模块#xff0c;已经有过类似的项目开发#xff0c;为了避免重复开发#xff0c;涉及到在该项目的工程中调用已开发的项目作为子项目#xff0c;有很多种方法。
一、将项目编译成库文件然后进行调用
调用库文件通常有两种…在开发一个软件项目时候当涉及到一个模块已经有过类似的项目开发为了避免重复开发涉及到在该项目的工程中调用已开发的项目作为子项目有很多种方法。
一、将项目编译成库文件然后进行调用
调用库文件通常有两种调用方法一种是内部调用一种是外部调用。两者的区别不大也就是
1.内部调用
用到TEMPLATE与SUBDIRS只是这样就还需要一个大框架C来包含A和B并不好用。
TEMPLATE subdirs
SUBDIRS \A \B 2.外部调用
1) 方法1
项目A中调用项目B 的大致流程如下
将项目B生成动态或者静态库编译动态库可以参考撮合Qt的mingw编译器与snmp3.4.6之源码编译动态库编译静态库可以参考撮合Qt的mingw编译器与snmp3.4.6之源码编译静态库将B的库文件和B所有的头文件一起放到项目A的工程目录下的同个目录中。当然也可以放到写入环境变量的目录下只是个人感觉没必要通过外部库调用引用库文件使用add Existing Directory导入头文件。使用库文件的方法可以参考撮合Qt的mingw编译器与snmp3.4.6之库文件使用。
1) 方法2
还有一种方法可以用到Qt的宏定义项目A中调用项目B 的大致流程如下
在项目B的pro文件中修改TEMPLATE lib意我编译为库文件在B的pro文件中添加DEFINES TEXT_LIBRARY意为导出库文件可参考Qt文档阅读笔记-共享库的创建与调用添加或者修改xxx_global.h文件与第二步中的DEFINES内容对应起来具体参考Qt文档阅读笔记-共享库的创建与调用修改B的类文件的内容类名前加上第二步中DEFINES的内容参考QT生成带界面的动态库并使用
二、将项目编译成库文件然后进行调用
1.直接导入调用
项目A调用项目B进行讲解。 直接将项目B的文件整个放入A中然后通过add Existing Directory将B放入A中。只是这样的话相当于将工程B的pro文件的内容都写入A的pro文件中这样A的工程文件会比较混乱不利于使用。
2.使用pri文件调用
在项目B中创建一个pri文件然后在A中调用B的pri文件pri文件中的内容大致就是B的pro文件中的内容。这样使用起来会比较整齐。 例如B的pro文件的内容如下
#-------------------------------------------------
#
# Project created by QtCreator 2019-01-22T17:29:55
#
#-------------------------------------------------QT core guigreaterThan(QT_MAJOR_VERSION, 4): QT widgetsTARGET ADataAnsys
TEMPLATE appSOURCES \widget.cpp \paintarea.cpp \globaldata.cpp \playthread.cpp \dataansys.cppHEADERS widget.h \paintarea.h \globaldata.h \playthread.h \dataansys.hFORMS widget.ui则pri文件的内容可以这么写
SOURCES \$$PWD/widget.cpp \$$PWD/paintarea.cpp \$$PWD/globaldata.cpp \$$PWD/playthread.cpp \$$PWD/dataansys.cppHEADERS $$PWD/widget.h \$$PWD/paintarea.h \$$PWD/globaldata.h \$$PWD/playthread.h \$$PWD/dataansys.h \FORMS $$PWD/widget.ui因为这两行内容
QT core guigreaterThan(QT_MAJOR_VERSION, 4): QT widgets在A的pro文件中有写因此可以不写。 这两行内容
TARGET ADataAnsys
TEMPLATE app因为B和A一起编译因此不能写。都使用A的内容。 pri文件启示是pro文件的补充。可参考
三、结论
将项目编译成库文件然后进行调用这样也有弊端在跨平台时可能会比较麻烦需要重新编译新的库。因此笔者更喜欢用第二种方法直接将要被调用的项目生成一个pri文件放入调用的工程文件中一起编译。