• QtCreator按顺序编译多个子项目


    0. 环境

    1. Qt5.3.2 mingw482_32

    1. 创建子项目

    这个子项目类似于Visual Studio中解决方案一样的存在,用于管理多个其他子项目。点击文件->新建文件或项目->其他项目->子项目项目->Choose
    在这里插入图片描述
    之后下一步,选择需要的编译器,我这里只有mingw,若有msvc编译器也可选择msvc,不同的编译器生成的静态库文件后缀名不一样,mingw后缀为.amsvc后缀为.lib

    2. 创建SubProjectSln的子项目

    1. UiApp
    2. Dll
    3. Lib

    SubProjectSln项目上新建子项目,操作如下,其他类同:
    在这里插入图片描述
    创建完成后项目目录结构如下:
    在这里插入图片描述
    其中SubProjectSln的项目文件内容如下:

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

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

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

    3. 三个项目内容

    Dll依赖 LibUiApp依赖Dll

    3.1 Dll

    Dll主要内容如下:

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

    Dll项目文件如下:

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

    3.2 Lib

    Lib主要内容如下:

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

    Lib项目文件内容如下:

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

    3.3 UiApp

    UiApp界面如下:
    在这里插入图片描述
    UiApp界面代码如下:

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

    UiApp项目文件如下:

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

    4. 构建

    以如下顺序构建:
    在这里插入图片描述
    这里的错误就是因为UiApp依赖了Dll,所以构建的顺序颠倒了。

    修改SubProjectSln项目文件如下:

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

    即可构建成功。

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

    运行结果如下:
    在这里插入图片描述

  • 相关阅读:
    使用docker 注册runner
    JVM 垃圾回收器
    第二十三节——路由懒加载+动态路由
    Python学习笔记
    ansible自动化运维工具的使用
    python多进程multiprocessing
    计算机毕业设计Java车位管理系统(源码+系统+mysql数据库+lw文档)
    微信小程序在线考试项目开发-用户授权登录、身份信息获取
    Python1 文件读写操作
    移动端ViT新利器!苹果提出稀疏专家混合模型Mobile V-MoEs
  • 原文地址:https://blog.csdn.net/weixin_41111116/article/details/126572024