写这篇文章的目的是为了让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 += widgetsTARGET = BigWay #表示编译后的库名字为BigWayTEMPLATE = app #表示项目是应用程序模式DESTDIR = ../bin #定义项目编译之后生成的结果文件的存放路径win32 { #表示Windows环境的特殊设置,这个大括号不能单独放在下一行,否则编译会报错LIBS += ../bin/SmallBoy.lib #包含项目需要用到的共享库
}unix { #表示Linux环境的特殊设置,这个大括号不能单独放在下一行,否则编译会报错LIBS += ../bin/libSmallBoy.so #包含项目需要用到的共享库,注意文件名多了关键字"lib",扩展名是.so
}SOURCES += main.cpp\ #项目中的所有源文件的列表mainwindow.cppHEADERS  += mainwindow.h #项目中的所有头文件的列表FORMS    += mainwindow.ui #项目中的所有.ui文件(由Qt设计器生成)的列表

SmallBoy.pro

#-------------------------------------------------
#
# Project created by QtCreator 2014-04-13T19:04:24
#
#-------------------------------------------------QT -= gui #不需要Qt ui库TARGET = SmallBoy #表示编译后的库名字为SmallBoyTEMPLATE = lib #表示项目是共享库模式DEFINES += SMALLBOY_LIBRARY #项目所需的额外的预处理程序定义的列表DESTDIR = ../bin #定义项目编译之后生成的结果文件的存放路径SOURCES += qsmallboy.cpp #项目中的所有源文件的列表HEADERS += qsmallboy.h\ #项目中的所有头文件的列表smallboy_global.hwin32 { #表示Windows环境的特殊设置,这个大括号不能单独放在下一行,否则编译会报错}unix { #表示Linux环境的特殊设置,这个大括号不能单独放在下一行,否则编译会报错target.path = /usr/libINSTALLS += 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下载,欢迎下载!

分享Qt多工程多目录的编译案例,subdirs相关推荐

  1. 代码工程 /Qt /5.9.3源码编译

    文章目录 概述 小试牛刀 安装Perl configure 执行编译 执行安装 再试牛刀 CMD导致的杯具 正式使用新环境 Qt 安装版(exe文件) 目录基本说明 一个小插曲 重新来过 编译环境 P ...

  2. 将vs+Qt的工程从windows平台移植到linux下_

    ​​​​​​​​​​​​将vs+Qt的工程从windows平台移植到linux下_崔杰城的博客-CSDN博客_windows下的qt工程移植到linux下 windows下Qt的开发人员常用vs+Qt ...

  3. 将vs+Qt的工程从windows平台移植到linux下

    windows下Qt的开发人员常用vs+Qt插件进行Qt桌面程序的开发.因为Qt是跨平台的,所以开发完成后如果需要把程序移植到linux下运行,只要把vs的项目工程放到linux下,编译即可.下面介绍 ...

  4. iOS架构-c++工程在Mac下编译成.a库并调用(12)

    请先了解:xcode生成静态库文件.a 前言: 有时侯需要使用c++的一些代码库,这里先讲一下用Xcode 建C++ 工程,并将代码编译成.a库,提供给demo使用.这里只是简单的介绍,以后会继续介绍 ...

  5. qt当前工程相对路径_QT编程:(6)相对路径问题

    QT编程:(6)相对路径问题 功能需求: (1) 单击"打开工程文件"按钮,弹出config文件夹对应的打开文件对话框,用户可在当前对话框选择所需工程文件. (2) 用户单击&qu ...

  6. qt 试用 (3)配置编译源代码及调试

    qt 试用 (3)配置编译源代码及调试 qt creater是一个集成ide,像vc一样容易使用,所以首先下载带qt creater的qt sdk     Offline installer - 1. ...

  7. VS 2013 统一修改所有工程的目录配置(以 boost、opencv3 的安装为例)

    vs2013 配置安装 opencv3.:VS2013下OpenCV3.0环境配置 在 vs2013安装配置C++boost库 一文中我们介绍了,如何在vs2013环境里配置安装boost库.在配置v ...

  8. QT多插件通信框架CTK编译记录

    目录 一  编译结果 二   部署配置 三  Log4Qt编译配置 四  参考链接 五  拓展资料 一  编译结果 参考链接有源码. 二   部署配置 ##CTK.pri# CTK install d ...

  9. QT创建工程时不存在Kits的解决方案

    把Qt安装好了,但是打开Qt Creator还是建不了工程,无法进行开发工作. 经过不断查找资料,找到一个可行方案. 首先,找到Qt Creator的菜单[Tool]->[Option...], ...

最新文章

  1. 全国计算机二级vfp知识点,全国计算机二级VFP知识点总结
  2. windows+sublime text3+MINGW编译运行c
  3. android 日历日期,android 日历 开始日期 与结束日期
  4. unity中静态变量的使用
  5. ASP.NET中常用的优化性能的方法(转贴,Icyer收集整理)
  6. ug计算机环境变量,ug80添加中文环境变量的具体方法
  7. matlab colorbar 颜色范围,Matlab对数范围colorbar imagesc
  8. 无心插柳OR志在必得?阿里推“来往”的意图
  9. 第16期高级转录组分析和R数据可视化培训(2022年1月)
  10. 【uniapp小程序】路由跳转navigator传参封装
  11. 接口自动化测试项目实战
  12. 用python画地球_如何用PYTHON程序模拟一个太阳系?
  13. Sublime Text 4.0 4084 汉化版 — 代码编辑器
  14. ActivityManagerService之进程管理(四)
  15. dir 616 虚拟服务器,DIR-616(DLink)无线路由器设置指南
  16. php 每次加密结果都不一样,实用的PHP带公钥加密类分享(每次加密结果都不一样哦)...
  17. 多项式最小二乘法曲线拟合Python程序
  18. 基于USB2.0的视频图像处理芯片实现方案
  19. 无线网卡驱动Qualcomm Atheros QCA9565 / AR9565 Wireless Network Adapter
  20. 微信支付——微信退款实战教程(Java版)

热门文章

  1. redis分布式锁的安全性及与zookeeper的对比
  2. 电压的降额 Voltage Derating
  3. 速腾聚创完成新一轮融资:华兴新经济基金领投 筹备上市
  4. 2654 最小距离最大
  5. Babel 是什么?· Babel 中文文档
  6. java从入门到出轨
  7. 南华大学计算机学院软件工程双一流,南华大学计算机学院软件工程与网络工程两个专业喜获湖南省高校专业综合评价A级...
  8. 前端开发:Vue报错Avoid mutating a prop directly since the value will be…的解决方法
  9. vscode上的git三部曲+git pull操作
  10. Android AndroidManifest 文件详解