个人建议直接看文章的最后部分的那种方法,那种方法容易上手,前面几种很麻烦很累

源代码地址:https://download.csdn.net/my

这个代码肯定有用,保证能运行。是我自己写

1、在D盘创建空文件夹qMulti

4678924034d090b462326dcaf0ff6842.png

2、使用Qt Creator创建App应用程序:BigWay。注意:创建模板是App,存放路径是D:\qMulti

19e1b0571820ed1630fb4485359bc05f.png

创建完成后,请关闭当前项目。

9fefac16d7913207469dd392b28076ad.png

301086306487134eb5eddb3698cee9cb.png

6025e8f9ff710226be313936fa8f3674.png

3、使用Qt Creator创建共享库项目:SmallBoy。注意:创建模板是C++ lib,存放路径是D:\qMulti

8e67fe57812e2e6ecddf19e560714577.png

e5eaea3bae786c418a302e0f0a622f96.png

e5eaea3bae786c418a302e0f0a622f96.png

7962de0b1d9585a181445f2c026557e5.png

daf1c088052afcf7589c18020a495d78.png

创建完成后,请关闭当前项目。

4、App和Lib创建完成之后,D:\qMulti的情况如下:

b0e0c2363905c81a2a514a40ad96bc19.png

我们手动新建一个文本文件D:\qMulti\qMulti.pro,内容如下:

或者用Qt Creator新建子目录项目qMulti:

f858ec50d59147f12e84ac4983de2def.png

然后用Qt Creator打开这个空的工程。右键菜单,选择“新子项目”,创建即可。(*^__^*)

1213cdd9445bd005bb7ae138480c9448.png

TEMPLATE=subdirs#表示这个是Qt跨目录,由多个子项目(如1个应用程序+多个共享库)组成的大项目

SUBDIRS=SmallBoyBigWay#大项目包含的各个子项目,其中BigWay是应用程序,SmallBoy是共享库

CONFIG+=ordered#CONFIG选项要求各个子项目按顺序编译,子目录的编译顺序在SUBDIRS中指明

到此为止,情况如下:

db128291be5b480ec14bb96d5ce8332b.png

5、使用Qt Creator打开大项目qMulti.pro,可以看到项目树形结构如下:

7a22d20820ebaa1da24e05909d32f1fc.png

(1)原始的BigWay.pro文件是这样的:

#-------------------------------------------------

#

#ProjectcreatedbyQtCreator2014-04-13T20:18:17

#

#-------------------------------------------------

QT+=coregui

greaterThan(QT_MAJOR_VERSION,4):QT+=widgets

TARGET=BigWay

TEMPLATE=app

SOURCES+=main.cpp\

mainwindow.cpp

HEADERS+=mainwindow.h

FORMS+=mainwindow.ui

我们将其修改为:

#-------------------------------------------------

#

#ProjectcreatedbyQtCreator2014-04-13T19:02:41

#

#-------------------------------------------------

QT+=coregui#需要的Qt库

greaterThan(QT_MAJOR_VERSION,4):QT+=widgets

TARGET=BigWay#表示编译后的库名字为BigWay

TEMPLATE=app#表示项目是应用程序模式

DESTDIR=../bin#定义项目编译之后生成的结果文件的存放路径

win32{#表示Windows环境的特殊设置,这个大括号不能单独放在下一行,否则编译会报错

LIBS+=../bin/SmallBoy.lib#包含项目需要用到的共享库

}

unix{#表示Linux环境的特殊设置,这个大括号不能单独放在下一行,否则编译会报错

LIBS+=../bin/libSmallBoy.so#包含项目需要用到的共享库,注意文件名多了关键字"lib",扩展名是.so

}

SOURCES+=main.cpp\#项目中的所有源文件的列表

mainwindow.cpp

HEADERS+=mainwindow.h#项目中的所有头文件的列表

FORMS+=mainwindow.ui#项目中的所有.ui文件(由Qt设计器生成)的列表

(2)原始的SmallBoy.pro文件是这样的:

#-------------------------------------------------

#

#ProjectcreatedbyQtCreator2014-04-13T20:24:55

#

#-------------------------------------------------

QT-=gui

TARGET=SmallBoy

TEMPLATE=lib

DEFINES+=SMALLBOY_LIBRARY

SOURCES+=qsmallboy.cpp

HEADERS+=qsmallboy.h\

smallboy_global.h

unix{

target.path=/usr/lib

INSTALLS+=target

}

我们将其修改为:

#-------------------------------------------------

#

#ProjectcreatedbyQtCreator2014-04-13T19:04:24

#

#-------------------------------------------------

QT-=gui#不需要Qtui库

TARGET=SmallBoy#表示编译后的库名字为SmallBoy

TEMPLATE=lib#表示项目是共享库模式

DEFINES+=SMALLBOY_LIBRARY#项目所需的额外的预处理程序定义的列表

DESTDIR=../bin#定义项目编译之后生成的结果文件的存放路径

SOURCES+=qsmallboy.cpp#项目中的所有源文件的列表

HEADERS+=qsmallboy.h\#项目中的所有头文件的列表

smallboy_global.h

win32{#表示Windows环境的特殊设置,这个大括号不能单独放在下一行,否则编译会报错

}

unix{#表示Linux环境的特殊设置,这个大括号不能单独放在下一行,否则编译会报错

target.path=/usr/lib

INSTALLS+=target

}

6、Linux环境下使用

如果把完整的项目源码qMulti拷贝到Ubantu Linux下的Qt编译,编译过程一切OK。但是运行时会报错,说“errorwhile loading shared libraries: libSmallBoy.so.1: cannot open shared objectfile: No such file or directory”原因指的是Linux下的共享库路径配置不正确,找不到libSmallBoy.so库文件。默认的linux共享库搜索路径为/lib和/usr/lib两个目录(不包含子目录)。

解决方案有两种:

(1)把编译生成的四个.so文件全部拷贝到文件系统的路径/usr/lib之下,需要管理员权限。

377d5b4e5cc8832411941c38f2ec3dfb.png

再运行程序,OK。

(2)修改Linux环境变量LD_LIBRARY_PATH,把Qt编程生成的路径加入。

export LD_LIBRARY_PATH=/usr/local/lib

在终端里运行上面这行命令,再运行程序,如果正常就说明解决问题。但是该方法只是临时设置变量 LD_LIBRARY_PATH ,下次开机,一切设置将不复存在;

最后一种方法:

前面的方法我都不太喜欢,没什么很大的逻辑性,不好理解,一般你做起来还不一定能成功,那么我们换一种思路建项目

之前步骤1~4讲的是先建项目再建qMulti.pro文件。其实我们可以采取逆序,先建qMulti.pro文件,后建子项目SmallBoy和BigWay。

我们手动新建一个文本文件D:\qMulti\qMulti.pro,内容如下:

TEMPLATE=subdirs#表示这个是Qt跨目录,由多个子项目(如1个应用程序+多个共享库)组成的大项目

CONFIG+=ordered#CONFIG选项要求各个子项目按顺序编译,子目录的编译顺序在SUBDIRS中指明

这几张图片就是手动创建最大项目的方法

f858ec50d59147f12e84ac4983de2def.png

然后用Qt Creator打开这个空的工程。右键菜单,选择“新子项目”,创建即可。(*^__^*)

1213cdd9445bd005bb7ae138480c9448.png

用这个方式建两次工程就可以了,一次是普通的工程,一次是共享哭的创建。实际很容易,建完以后的效果是如下图:

0a870cf82b27e60e9ddc0f91c70fbbaa.png

此时其实就已经完全成功了,就可以实现相应的功能了

运行如下:

e97ffbef3b12c7309f7c3d21fa619e20.png

这样就很快的实现了一个项目下面存在多工程的项目创建。

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐