首页 > 其他分享 >Qt Creator按顺序编译多个子项目

Qt Creator按顺序编译多个子项目

时间:2023-05-24 15:24:16浏览次数:34  
标签:bin .. Lib Creator Dll 子项目 lib debug Qt

0. 环境

Qt5.3.2 mingw482_32

1. 创建子项目

这个子项目类似于Visual Studio中解决方案一样的存在,用于管理多个其他子项目。点击文件->新建文件或项目->其他项目->子项目项目->Choose

之后下一步,选择需要的编译器,我这里只有mingw,若有msvc编译器也可选择msvc,不同的编译器生成的静态库文件后缀名不一样,mingw后缀为.a,msvc后缀为.lib。

2. 创建SubProjectSln的子项目

  1. UiApp
  2. Dll
  3. Lib

在SubProjectSln项目上新建子项目,操作如下,其他类同:

 创建完成后项目目录结构如下:

 其中SubProjectSln的项目文件内容如下:

1 TEMPLATE = subdirs
2 
3 SUBDIRS += \
4     UiApp \
5     Dll \
6     Lib

这里最主要的就是这个项目文件

  • TEMPLATE不为subdirsSubProjectSln就不能创建子项目
  • SUBDIRS的项目顺序默认就是构建的顺序。

3. 三个项目内容

Dll依赖 LibUiApp依赖Dll

3.1 Dll

Dll主要内容如下:

 1 #include "dll.h"
 2 #include "../lib/lib.h"
 3 
 4 Dll::Dll()
 5 {
 6 
 7 }
 8 
 9 QString Dll::getDllName()
10 {
11     return "Dll";
12 }
13 
14 QString Dll::getLibName()
15 {
16     Lib lib;
17     return lib.getName();
18 }

Dll项目文件如下:

 1 #-------------------------------------------------
 2 #
 3 # Project created by QtCreator 2022-08-28T16:51:01
 4 #
 5 #-------------------------------------------------
 6 
 7 QT       -= gui
 8 
 9 TARGET = Dll
10 TEMPLATE = lib
11 
12 DEFINES += DLL_LIBRARY
13 
14 CONFIG(debug,debug|release){
15     DESTDIR = ../bin/debug
16     LIBS += ../bin/debug/libLib.a
17 } else {
18     DESTDIR = ../bin/release
19     LIBS += ../bin/release/libLib.a
20 }
21 
22 SOURCES += dll.cpp
23 
24 HEADERS += dll.h\
25         dll_global.h
26 
27 unix {
28     target.path = /usr/lib
29     INSTALLS += target
30 }

3.2 Lib

Lib主要内容如下:

 1 #include "lib.h"
 2 
 3 
 4 Lib::Lib()
 5 {
 6 }
 7 
 8 QString Lib::getName()
 9 {
10     return "Lib";
11 }

Lib项目文件内容如下:

 1 #-------------------------------------------------
 2 #
 3 # Project created by QtCreator 2022-08-28T16:51:22
 4 #
 5 #-------------------------------------------------
 6 
 7 QT       -= gui
 8 
 9 TARGET = Lib
10 TEMPLATE = lib
11 CONFIG += staticlib
12 
13 CONFIG(debug,debug|release){
14     DESTDIR = ../bin/debug
15 } else {
16     DESTDIR = ../bin/release
17 }
18 
19 SOURCES += lib.cpp
20 
21 HEADERS += lib.h
22 unix {
23     target.path = /usr/lib
24     INSTALLS += target
25 }

3.3 UiApp

UiApp界面如下:

 UiApp界面代码如下:

 1 #include "widget.h"
 2 #include "ui_widget.h"
 3 #include "../Dll/dll.h"
 4 
 5 Widget::Widget(QWidget *parent) :
 6     QWidget(parent),
 7     ui(new Ui::Widget)
 8 {
 9     Dll dll;
10     ui->setupUi(this);
11     ui->dllLabel->setText(dll.getDllName());
12     ui->libLabel->setText(dll.getLibName());
13 }
14 
15 Widget::~Widget()
16 {
17     delete ui;
18 }

UiApp项目文件如下:

 1 #-------------------------------------------------
 2 #
 3 # Project created by QtCreator 2022-08-28T16:50:24
 4 #
 5 #-------------------------------------------------
 6 
 7 QT       += core gui
 8 
 9 greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
10 
11 TARGET = UiApp
12 TEMPLATE = app
13 
14 CONFIG(debug,debug|release){
15     DESTDIR = ../bin/debug
16     LIBS += ../bin/debug/Dll.dll
17 } else {
18     DESTDIR = ../bin/release
19     LIBS += ../bin/release/Dll.dll
20 }
21 
22 
23 SOURCES += main.cpp\
24         widget.cpp
25 
26 HEADERS  += widget.h
27 
28 FORMS    += widget.ui

4. 构建

以如下顺序构建:

这里的错误就是因为UiApp依赖了Dll,所以构建的顺序颠倒了。

修改SubProjectSln项目文件如下:

1 TEMPLATE = subdirs
2 
3 SUBDIRS += \
4     Lib \
5     Dll \
6     UiApp

即可构建成功。

我网上查资料有的说要在SubProjectSln项目文件中加CONFIG += ordered,使SUBDIRS按照顺序构建,但是我测试下来不加CONFIG += ordered,也是按照顺序构建的,猜测可能是版本的原因~~~

运行结果如下:

 

标签:bin,..,Lib,Creator,Dll,子项目,lib,debug,Qt
From: https://www.cnblogs.com/ybqjymy/p/17428378.html

相关文章

  • Qt+QtWebApp开发笔记(三):http服务器动态html连接跳转基础交互
    前言  网页很多时候是动态的,于是本篇文章目标实现一个简答的动态页面—页静态页面互相跳转,点击可以跳转到子页面。 Demo  下载地址  链接:https://pan.baidu.com/s/1bbhcu1XTiaJRYGRQRG5a0g?pwd=1234 HTML基本页面交换  上一篇的“HelloWorld”......
  • 使用QtCreator C++编写串口调试助手
    Qt小白一枚,喜欢嵌入式应用,以前都是使用别人的串口调试助手,学习了C++以后,自己也尝试着做了简单的串口调试助手,分享给大家吧,希望能帮助到大家,如果有错误,请大家指正。话不多说开干!1.首先看一下我设计的界面(我这里比较简单,大家可根据自己的需求进行设计)(界面设计的过程中,每一个控件......
  • Qt桌面应用程序打包
    小白一枚,今天来给大家分享一下如何将自己编写的桌面应用程序进行打包,便于在其他的电脑上进行安装使用。如有错误之处请大家指正,谢谢!好了,废话不多说开干。这里简要的介绍一下使用QtCreator编写的应用程序的打包。1.将Debug模式切换称为ewlease模式进行编译,编译后没有任何错误即......
  • QT5中动态更改图标的方法(转)
    简述在做工程中遇到一个问题,需要根据程序的运行动态的改变显示的图标。在网上找了几篇博客,都失败了,后来自己看UI文件,发现了失败原因,就是设置图标的时候,输入的问文件路径有问题。我摸索出的方法如下。Step1:添加资源文件在工程文件处,右击鼠标》添加新文件》QTresource修改前缀名......
  • Qt编写视频监控系统74-悬浮工具栏(半透明/上下左右位置/自定义按钮)
    一、前言在监控系统中一般在视频实时预览的时候,希望提供一个悬浮工具条,可以显示一些提示信息比如分辨率、码率、帧率,提供一堆快捷操作按钮,可以录像、抓拍、云台控制、关闭等操作,参考了国内很多监控厂商客户端软件,总结下来基本就是悬浮条可以半透明悬浮在通道窗体上,也有少部分是固......
  • Qt 的Cmake方式如何创建资源文件和添加类
    CLion(误,QTCreator)添加资源文件时选择Qt然后选择QtResourceFile单击choose,然后给你的资源文件输入一个名字比如res单击下一步,然后完成,保存这时候工程和上面添加类是一样的,看不到添加的资源文件,还是要手动到CMakeList.txt文件在里面手动输入res.qrc然后单击X关掉CMakeList......
  • Qt程序打包和发布
    准备工具1、QtCreator,记录QtCreator的安装路径2、NSIS空白脚本程序和NSIS汉化脚本程1Windows下打包与发布1.1打包成zip发布1、通过QtCreatorbuild应用程序,选择Relaeasebuild的应用程序占用空间少(推荐),选择Debugbuild的应用程序占用空间大。2、进入到build产物路径下,......
  • vernemq 一个可用的入门指南之一:Mac下的安装及使用,使用MQTTX访问verneMQ
    因为百度到一篇简书的,不可用,所以写这么一篇,方便后来人物联网的消息队列技术选型,很多地方会推荐使用VerneMQ,这里做一个安装实验记录,并非推荐。gitclonehttps://github.com/vernemq/vernemq.gitcdvernemqsudomakerel 官网没有加sudo,执行失败,安装过程会多次下载github......
  • Qt 中md5 计算
    #include<QCryptographicHash>QByteArrayhash2=QCryptographicHash::hash(password.toLocal8Bit(),QCryptographicHash::Md5);autopwd=hash2.toHex().toStdString();源代码QByteArrayQCryptographicHash::hash(constQByteArray&data,Algorithmmeth......
  • Qt之事件系统
    Qt中,事件作为一个对象,继承自QEvent类,常见的有键盘事件QKeyEvent、鼠标事件QMouseEvent和定时器事件QTimerEvent等。常见的处理事件的方法如下:(1).重新实现部件的paintEvent、mousePressEvent()等事件处理函数,这是最常用的一种方法,不过只能用来出来特定部件的特定事件。(2).......