分享Qt多工程多目录的编译案例,subdirs

写这篇文章的目的是为了让Qt像VC++那样,支持一个工程包含多个项目。即1个App+多个动态库。本案例以1个App+1个共享库为例:

工程源码我已上传Qt多工程多目录的编译案例_qt子项目编译顺序-C++代码类资源-CSDN下载,欢迎下载!

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

 

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

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

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

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

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

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

TEMPLATE = subdirs #表示这个是Qt跨目录,由多个子项目(如1个应用程序+多个共享库)组成的大项目
SUBDIRS = SmallBoy BigWay #大项目包含的各个子项目,其中BigWay是应用程序,SmallBoy是共享库
CONFIG += ordered #CONFIG选项要求各个子项目按顺序编译,子目录的编译顺序在SUBDIRS中指明

到此为止,情况如下:

 

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

BigWay.pro

#-------------------------------------------------
#
# Project created by QtCreator 2014-04-13T19:02:41
#
#-------------------------------------------------

QT += core gui #需要的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设计器生成)的列表

SmallBoy.pro

#-------------------------------------------------
#
# Project created by QtCreator 2014-04-13T19:04:24
#
#-------------------------------------------------

QT -= gui #不需要Qt ui库

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之下,需要管理员权限。

再运行程序,OK。

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

export LD_LIBRARY_PATH=/usr/local/lib

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

 7、换一种思路建项目

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

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

TEMPLATE=subdirs#表示这个是Qt跨目录,由多个子项目(如1个应用程序+多个共享库)组成的大项目
CONFIG+=ordered#CONFIG选项要求各个子项目按顺序编译,子目录的编译顺序在SUBDIRS中指明

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

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

工程源码我已上传Qt多工程多目录的编译案例_qt子项目编译顺序-C++代码类资源-CSDN下载,欢迎下载!

  • 15
    点赞
  • 76
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
### 回答1: Qt5开发及实例是一本非常实用的Qt编程教程,全面介绍了Qt5的基础知识和高级应用。本书共分为16章,其中包括了Qt5的GUI编程、多线程编程、网络编程、数据库编程、OpenGL编程等各个方面。 此外,本书还通过多个实例来演示如何使用Qt5开发应用程序,例如图形界面的应用程序和实时图形绘制的应用程序。每个实例都包括了详细的代码示例和步骤说明,让读者轻松上手。 如果您正在学习Qt5编程,或者希望提升自己的Qt编程技能,那么这本书是非常值得您拥有的。您可以从中学习到很多实用的编程知识和技巧,并且掌握Qt5开发的基本方法和应用技术。 本书附带有完整的代码示例和配套资料,方便读者进行编程实践和测试。如果您想要下载本书的电子版或者相关资源,请访问原作者网站或者其他电子书下载网站进行下载。 ### 回答2: 《Qt5开发及实例 第4版》是一本介绍Qt5开发框架的权威经典著作。该书涵盖了Qt5最新版本的新特性和应用场景,以及一系列实际开发案例,阅读该书可有助于提升读者在Qt5下的开发水平。 该书是一本非常适合从事软件开发的工程师、系统架构师、技术经理、IT学生和研究人员阅读学习的参考书。该书内容详实,干货十足,对于想要学习或进行Qt5开发的人来说是一本非常值得购买的参考书。 在该书中,读者可以学习如何基于Qt5开发桌面程序、嵌入式系统、通信程序、数据可视化、多媒体应用等应用场景,同时还能够了解到Qt5的设计模式、编程技巧、优化方法等方面的知识。 该书的下载方式比较简单,可以通过互联网电子书下载网站、淘宝等渠道进行购买和下载。由于该书是一本高质量的电子书,因此建议从正规渠道购买,以保证获取到完整的版本。 总之,《Qt5开发及实例 第4版》是一本对于Qt5开发者来说非常重要的参考书,是一本可以帮助大家提高开发水平,解决开发难题,完成项目任务的指南。大家可以进行相关阅读,深入掌握Qt5开发框架,提升自身的技术能力及水平。 ### 回答3: Qt5是一个流行的平台的应用程序框架,可以用来开发各种类型的应用程序。《Qt5开发及实例》是一本介绍如何使用Qt5开发应用程序的书籍,提供了许多实例帮助读者快速上手。 第4版的《Qt5开发及实例》包含了对Qt5最新版本的介绍和讲解,内容主要涵盖Qt5的基础知识、控件、布局、绘图、图像处理、网络编程、数据库编程等方面。同时,该书还介绍了如何使用Qt Creator和Qt Designer等工具进行开发,并提供了大量的实例代码和截图,方便读者理解和实践。 读者可以通过书籍的下载链接获取该书的电子版,以便于随时随地学习和参考。通过学习《Qt5开发及实例》这本书,读者可以快速掌握Qt5的开发技能,提高应用程序的开发效率和质量。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值