QT中多项目管理问题
0.前言
在编写项目的过程中,当项目比较多时,需要进行统一的管理,这时可以使用qt的子项目管理的方式。
参考:
-
QT 创建多个子项目,以及调用:https://blog.csdn.net/chen1231985111/article/details/126251292
-
QtCreator按顺序编译多个子项目:https://blog.csdn.net/weixin_41111116/article/details/126572024
-
Qt多工程多目录的编译案例:https://www.shuzhiduo.com/A/VGzl69DO5b/
1.创建子目录项目(类似VS中的解决方案)
这个子项目类似于Visual Studio中解决方案一样的存在,用于管理多个其他子项目。点击文件->新建文件或项目->其他项目->子目录项目->Choose:

![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lNaGEL93-1677746891112)(.images/06-QT多项目管理/image-20230302155619084.png)]](https://img-blog.csdnimg.cn/e8f1b67242404329a76c6cdca2f9a8b8.png)
之后下一步,选择需要的编译器,我这里只有mingw,若有msvc编译器也可选择msvc,不同的编译器生成的静态库文件后缀名不一样,mingw后缀为.a,msvc后缀为.lib。我这里使用的是msvc编译器。
创建好的子项目目录如下图:
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5bMsmDkF-1677746891113)(.images/06-QT多项目管理/image-20230302155813613.png)]](https://img-blog.csdnimg.cn/a25b1e1bc4894c23aaf167acc13df985.png)
2. 创建SubProjectSln的子项目
先创建两个应用程序子项目。
在项目名上右键,选择新子项目,或者是已经存在的项目Add Existing Projects...

创建两个应用程序项目(QT的窗体项目)
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vFOMUnDl-1677746891113)(.images/06-QT多项目管理/image-20230302161020154.png)]](https://img-blog.csdnimg.cn/dd2598e89f0a46b4a6a6d31bab54e154.png)
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-06OJWfCL-1677746891113)(.images/06-QT多项目管理/image-20230302161001505.png)]](https://img-blog.csdnimg.cn/925b0d6b1ae444f8ab4bce87a32a9e6e.png)
这时项目的SubProjectSln.pro为:
# 指定编译后生成app 还是 lib, subdirs这里代表的是一个子目录项目
TEMPLATE = subdirs
# 添加子项目
SUBDIRS += \
app_01 \
app_02
这里最主要的就是这个项目文件
TEMPLATE不为subdirs则SubProjectSln就不能创建子项目SUBDIRS的项目顺序默认就是构建的顺序。
如果添加多个应用程序的项目(就是可执行的那种,有.exe,有main函数的那种),运行总的项目,只能有一个应用程序执行,默认执行的是先添加进来的项目。
3.添加动态库子项目
创建两个动态库子项目。
先右键项目名,选择新子项目,选择Library下的C++ Library

![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YFykyRdA-1677746891114)(.images/06-QT多项目管理/image-20230302161813867.png)]](https://img-blog.csdnimg.cn/9979b34f0fb94d86920c85b3700e915f.png)
创建好之后目录结构为:
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-iMiLoEIj-1677746891114)(.images/06-QT多项目管理/image-20230302162926641.png)]](https://img-blog.csdnimg.cn/67c0bbf69dfc4355bed317adca67263c.png)
在动态库子项目的.pro中添加一些相关的配置
# DESTDIR:指定最终文件生成的目录,相对路径为当前总项目的构建路径,每个子项目有一个以项目名命名的文件夹,
DESTDIR = ./bin
# TARGET:指定编译后生成的目标文件名称,如 xxx.dll,如果不写的话,默认以子项目名为名字
TARGET = lib_01_d.dll
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XOwvMlSX-1677746891114)(.images/06-QT多项目管理/image-20230302164645089.png)]](https://img-blog.csdnimg.cn/7e2bf0f4f7034d329ee147fac1af0bcb.png)
4.进行构建
在SubProjectSln.pro中添加CONFIG+=ordered,必须添加这个才可以把所有的子项目都构建了,运行时只运行最先添加进来的有main函数的那个子项目。
# CONFIG选项要求各个子项目按顺序编译,子目录的编译顺序在SUBDIRS中指明
CONFIG+=ordered
直接在总项目上执行构建操作
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PLdNLwNc-1677746891114)(.images/06-QT多项目管理/image-20230302164458252.png)]](https://img-blog.csdnimg.cn/581a4b119a8b4b12b07fc764e17456e7.png)
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ItU2INlK-1677746891115)(.images/06-QT多项目管理/image-20230302164414408.png)]](https://img-blog.csdnimg.cn/704787f6192c45c3b4f23cf8576b6098.png)



















