QtCreator按顺序编译多个子项目

2023-05-16

QtCreator按顺序编译多个子项目

  • 0. 环境
  • 1. 创建子项目
  • 2. 创建SubProjectSln的子项目
  • 3. 三个项目内容
    • 3.1 Dll
    • 3.2 Lib
    • 3.3 UiApp
  • 4. 构建

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

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

  • 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();
}

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
}

3.2 Lib

Lib主要内容如下:

#include "lib.h"


Lib::Lib()
{
}

QString Lib::getName()
{
    return "Lib";
}

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
}

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;
}

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

4. 构建

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

修改SubProjectSln项目文件如下:

TEMPLATE = subdirs

SUBDIRS += \
    Lib \
    Dll \
    UiApp

即可构建成功。

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

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

QtCreator按顺序编译多个子项目 的相关文章

  • QtCreator 4 和 CMake 参数

    我曾经使用 QtCreator 打开基于 CMake 的 C 项目 并在配置项目时传递我的自定义 CMake 命令行参数 在 QtCreator 的最新版本 准确地说是 QtCreator 4 中 这似乎不再可能了 QtCreator 使用
  • 如何使用QtCreator远程调试图形应用程序?

    我开发了一个跨平台的 Qt 应用程序 现在我需要 想要在远程主机上运行它并加载 GUI 表单 我知道有两种方法可以做到这一点 通过连接到 QtCreator 的控制台在远程显示器 可能是虚拟的 上打开应用程序ssh 使用远程 X 会话运行
  • 如何在 QtCreator 的调试器中显示 std::multimap 和 std::multiset 的内容?

    我正在尝试检查 a 的内容std multimap and std multiset in the 局部变量和表达式的窗口Qt创建者 我得到的不是值列表 而是显示的实现细节 奇怪的是 std map and std set对应的显示良好 i
  • 优化 QtCreator 编译器的配置

    我在 Windows 7 中使用 QtCreator 我想将其配置为使用第三级优化 O3 用于 C 编译器 我怎样才能加快我的代码速度以及需要进行哪些更改 尝试将下一行添加到您的 pro 文件中 remove possible other
  • QtCreator 中使用 Clang 支持 C++14

    如何使用 Clang 3 5 在 QtCreator 3 3 中启用 C 14 支持 我添加了一个 Clang 套件并且添加了CONFIG c 14在我的项目文件中 然而 当使用例如返回类型推导 https stackoverflow co
  • qmake 中的 debug_and_release 配置功能有什么优点?

    我只能看到未来的一个优点 我们能够发行make all commad 好吧 我不打电话make在我的开发人员生命中的任何阶段 我使用 Qt Creator 当我构建项目时 我希望它严格作为调试或发布 我想这是人们预期的行为 But debu
  • 错误:“if”之前应有不合格的 id

    我用谷歌搜索了这个错误 直到我脸色发青 但无法将任何结果与我的代码联系起来 这个错误似乎通常是由于牙套 父母等放错位置或丢失造成的 我已经很长时间没有写过任何 C 了 所以我可能遗漏了一些明显的 愚蠢的东西 这是我正在编写的 Qt Mobi
  • 配置 Qt Creator 以与 GDB 一起使用

    我的机器上有 GDB 和 CDB 我的 Qt 创建者正在使用 CDB 进行调试 我试图指向GDB路径 但它不起作用 如何设置 Qt Creator 使用 GDB 进行调试 确保您已将 Qt Creator 设置为 调试 构建配置 构建菜单
  • QtCreator Build 不会更新设计表单中的 UI 更改

    我的 Qt 项目使用影子构建 当我更改 MainWindow 表单 ui 文件 时 我构建了项目 但我的程序没有更新 GUI 如果我重建所有 GUI 将被更新 但重建速度非常非常慢 我尝试创建一个新项目 带有一些标签的空 QMainWind
  • 如何在C++程序中获得debug/release条件编译

    在大型 C Qt QMake qtcreator 项目中 我想执行一些测试 但仅限于使用调试标志进行编译时 有没有办法告诉 g 代码的某些小部分只能在调试模式下编译 执行此操作的标准方法是依赖于宏NDEBUG 由宏使用assert 定义于
  • 如何将小部件(例如 QPushButton)动态添加到设计器内置的布局中

    我正在玩Qt 主要是想为symbian重写一个旧的java应用程序 但我自己有点困惑 我首先要说明的是 C 不是我的功夫 这可能就是问题的根源 我想做的是将一个简单的 QPushButton 添加到主窗口中的垂直布局 该窗口已在运行时在 q
  • Qt Designer - 窗口不会变得比带有像素图的 QLabel 小

    我正在创建一个程序 在 Qt Creator 2 8 1 Qt 5 1 1 中 它基本上显示一个图像 在本例中是一张扑克牌 以及一些按钮 标签和行编辑 所有小部件均采用垂直 水平布局 窗口布局为网格布局 我重新实现了主窗口调整事件大小为了使
  • 如何抑制 Qt Creator 中的警告

    我想知道是否可以在 Qt Creator 中抑制编译器特定的警告 我的 g 4 5 打印 警告 条件表达式中的枚举和非枚举类型 我想摆脱它 因为它非常烦人 乌班图 11 04 x64 g 4 5 QtCreator 2 01 Qt 4 7
  • 当 std::cerr 上打印某些内容时设置 gdb 断点

    我使用 qt creator 作为 gdb 的 IDE 和前端 当对 std cerr 变量调用operator 如何在 std cerr 设置断点 你的问题没有意义 std cerr是一个全球性的variable 您只能在函数上设置断点
  • 在 QT Creator 中无法访问局部变量和表达式中的变量

    如果我尝试在 QT Creator 中调试我的 C 程序 局部变量和表达式 窗口会向我显示程序中的变量 然而 所有值都显示 截屏 我如何获得要显示的值 我可以用 cout 打印出这些值 这样我就知道它们已经初始化了 编辑 它似乎只适用于字符
  • 缺少 mingwm10.dll

    我正在使用 Qt Creator 编写一个 C 项目 一切工作正常 调试 发布 但是当我直接运行编译后的 exe 转到 exe 文件并运行它 时 它说 mingwm10 dll 丢失 对于这个问题我能做什么 您可以执行以下操作 as cha
  • 将 Homebrew 安装的 Qt 添加到 Mac 上的 Qt Creator

    我通过安装 Qt5 和 Qt Creatorhomebrew https brew sh 由于它们是彼此独立安装的 因此 Qt 不会自动添加到 Qt Creator 中的已知 Qt 安装列表中 我以为添加安装很简单 但是 由于自制程序将所有
  • 如何链接Intel MKL库,只需使用cblas_dgemm函数

    我想测试Intel MKL矩阵乘法 所以我包括并且只使用 cblas dgemm 函数 但它总是说 undefined reference to cblas dgemm 我还链接了 lmkl core lmkl blas95 lp64 lm
  • Qt Creator 中的按钮是否有隐藏属性?

    Qt Creator 属性托盘中是否有按钮的隐藏属性 我想找到一个 但找不到 我需要禁用一些按钮并隐藏一些按钮 我应该使用属性托盘还是在构造函数中进行 稍后在用户事件中 它们将被启用并显示 有些控件在调色板上具有 可见性 属性 有些则没有
  • 如何在Qt中设置编译器?

    我对 Qt 完全陌生 我下载了离线版本 Qt 5 3 2 for Windows 64 bit VS 2013 OpenGL 573 MB 我无法编译我的项目 I have Qt Creator 3 2 1 开源 基于Qt 5 3 2 MS

随机推荐

  • vim设置行号

    vim设置行号 方法一 xff1a 临时 或者 方法二 xff1a 当前用户永久 1 修改vim配置文件vimrc vim vimrc 输入 xff1a set number 或 set nu 保存退出 方法三 所有用户 1 vim etc
  • tomcat 配置https

    一 生成证书 1 使用jdk自带的keytool ext生成证书 xff0c 进入jdk下bin目录 xff1b 2 在路径栏输入cmd 回车打开dos命令窗口 xff0c 打开之后当前路径为jdk下bin目录 ps xff1a 也可直接w
  • Google http测试工具

    一 下载 xff1a 下载地址 xff1a https pan baidu com s 16mCI0QUn z0kNPX4yqGEWg 提取码 xff1a sgiz 二 配置 1 解压文件 2 在Google里配置插件 xff0c 或者叫扩
  • linux mysql 离线安装

    一 下载 1 官网地址 https dev mysql com downloads mysql 点击Archives 选择需要的版本 点击Download 进行下载 xff0c 如需要登录自行注册登录 将下载的安装包上传至linux系统 2
  • cmd介绍及常用命令

    cmd介绍 cmd基本概念 cmd commander xff0c 命令提示符是在操作系统中 xff0c 提示进行命令输入的一种工作提示符 在不同的操作系统环境下 xff0c 命令提示符各不相同 在windows环境下 xff0c 命令行程
  • 计算机的发展史

    计算机的发展史 计算机的前身 1642年的时候 xff0c 一位19岁的法国小伙设计并制作了一台能自动进位的加减法计算装置 xff0c 一开始是只能算加法的 xff0c 所以叫 加法器 后来慢慢改良 xff0c 可以做加减乘除的四则运算 x
  • 利用Radiogroup Radiobutton 实现滑动效果菜单

    第一次在满世界大侠的地方撰写博客 xff0c 所以不免紧张 xff0c 怕自己写出让人消掉大牙的文章 本着学习的态度 xff0c 最后我还是决定把自己的学习感想记录下来 首先我要感谢一个哥们 xff0c 大部分的内容都是他的杰作 xff0c
  • 一、初识VUE

    一 什么是vuejs VUE是一个渐进式的框架 xff0c 什么是渐进式呢 xff1f 渐进式意味着可以将vue作为应用的一部分 xff0c 嵌入应用 也就是说 xff0c 在一个整体项目中 xff0c 部分可用jQuery xff0c 部
  • Linux目录概述

    一 概述 由于开发linux发行版的社区或这企业太多 xff0c 如过每个Linux发行版的目录结构都不相同 那么在管理和使用上会造成很多困扰 xff0c 所以就有了FHS Filesystem Hierarchy Standard 的出现
  • ls与cp命令详解

    一 文件与目录检视 ls a xff1a 全部的文件 xff0c 连同隐藏文件 xff08 开头为 的文件 xff09 一起列出来 xff08 常用 xff09 A xff1a 全部的文件 xff0c 连同隐藏文件 xff0c 但不包括 与
  • linux 安装JDK

    一 下载JDK 版本 xff1a jdk 8u191 linux x64 tar gz 链接 xff1a https pan baidu com s 1w9HpHBRPHCfoiEpGSKJqXA 提取码 xff1a whya 二 安装 创
  • java调用DLL之jna

    一 添加maven依赖 span class token comment lt https mvnrepository com artifact net java dev jna jna gt span span class token t
  • 三、vue :定义变量、v-for、v-on示例

    一 vue定义变量 let xff1a 定义变量const xff1a 定义常量 contst定义常量时 xff0c 必须赋值 指向的对象不可改变 xff0c 但是对象中的属性 contst obj 61 name 39 张三 39 obj
  • 二、vue插值操作

    一 Mustache mustache语法就是两个大括号 34 34 mastache语法不仅直接可以写值 xff0c 也可以写一些简单的表达式 span class token tag span class token tag span
  • 二、vue中v-bind使用

    一 v bind基本使用 一个页面中 xff0c 除了标签内容需要动态绑定外 xff0c 标签的属性也需要动态绑定 xff0c 例如 xff1a a元素的href属性和img元素的src属性 这时就需要用到v bind了 span clas
  • 四、vue计算属性的使用

    通常 xff0c 在模板中可直接通过插值语法显示data中的属性 xff0c 但是在某些情况 xff0c 需要将某些数据进行转化后显示或者将多个数据结合起来显示 计算属性的基本使用 span class token tag span cla
  • firewall-cmd 端口管理

    1 开放端口 firewall span class token operator span cmd span class token operator span zone 61 public span class token operat
  • BIND 高级特性(二)-- 动态更新(转)

    BIND 高级特性 xff08 二 xff09 xff0d xff0d 动态更新 转 64 more 64 在很多大的网络中为了简化维护量 xff0c 都使用了DHCP来动态分配IP地址 这样就要求DNS也能够动态的添加和删除记录 BIND
  • Vue内置指令——v-show

    v show的用法与v if类似 xff0c 不同的是带有 v show 的元素始终会被渲染并保留在 DOM 中 v show 只是简单地切换元素的 CSS 属性 display span class token doctype span
  • QtCreator按顺序编译多个子项目

    QtCreator按顺序编译多个子项目 0 环境1 创建子项目2 创建SubProjectSln的子项目3 三个项目内容3 1 Dll3 2 Lib3 3 UiApp 4 构建 0 环境 Qt5 3 2 mingw482 32 1 创建子项