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按顺序编译多个子项目 的相关文章

  • 哪个更好? Qt Creator 或 Visual Studio IDE [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我目前在我的 Qt 应用程序中使用 Qt Creator 1 3 我知道它使用jom for make当我们拥有多核处理器时 这一步会更好 但除
  • 如何更改 QtCreator 中的构建目录?

    我有一个使用 QtCreator 完成的基于 cmake 的 C 项目 我手动编写了 CMakeLists txt 文件 当从 QtCreator 的命令行构建时 我得到了这个目录结构 如预期的那样 MyProj source code M
  • 配置 Qt Creator 以与 GDB 一起使用

    我的机器上有 GDB 和 CDB 我的 Qt 创建者正在使用 CDB 进行调试 我试图指向GDB路径 但它不起作用 如何设置 Qt Creator 使用 GDB 进行调试 确保您已将 Qt Creator 设置为 调试 构建配置 构建菜单
  • QT:隐藏 QML 调试警告

    QML 调试已启用 仅在安全环境中使用此功能 我实际上正在为 QtCreator 项目开发 Python 测试软件 该项目需要使用 QML 调试 python 软件正在运行构建的项目并测试其功能 我想实际上隐藏该消息而不禁用 QML 调试
  • 将外部库添加到 Qt Creator 项目中

    如何将外部库添加到 Qt Creator RC1 版本 0 9 2 构建的项目中 例如win32函数EnumProcesses 需要Psapi lib要添加到要构建的项目中 正确的方法是这样的 LIBS L path to lpsapi 这
  • QGraphicsScene 子类忽略鼠标按下事件

    我有一个 UI 和一个实现 mousePressEvent 的 QGraphicsScene 子类 GraphicsScene 但是鼠标单击被忽略 ui gt setupUi this scene new GraphicsScene thi
  • 如何将 Qt5 和 Qt Creator 2.6.1 与 VS 2012 的编译器一起使用?

    官方下载 http qt project org downloads现在仅包含 VS 2010 的 Qt 库 5 0 0 我在 VS 2012 Express 中尝试了它们 但收到一条错误消息 错误 LNK2038 检测到 MSC VER
  • 如何在Python中读取QLineEdit中的文本?

    我为我的插件创建了一个带有 3 个按钮的启动 GUI 这非常有效 如果我单击其中一个按钮 就会启动特定操作 到目前为止这有效 如果我单击其中一个按钮 则会出现一个带有两个按钮 确定 和 取消 的新 GUI 以及一个行编辑 如果我按下 取消
  • iOS 版 QtCreator:如何使用我的应用程序部署 dylib 共享库

    我在 iOS 上部署动态共享库时遇到了困难 为了隔离和暴露问题 我有一个非常简单的 HelloWorld 项目 一个库导出类 其中包含返回 Hello World 的函数 以及一个使用该类并显示消息的程序 我正在使用 QtCreator 和
  • 在 Qt Creator 中推广小部件

    Qt 创建者可以选择将一个小部件提升为从基本小部件派生的自定义创建的类 我想使用它来将小部件提升为当前项目中的类 Qt 创建者询问我有关类名和头文件名的信息 这些值直接转到 ui文件 然后到ui myform h 问题是该文件可能 通常是
  • 如何在 Qt Creator 中添加名称以大写字母开头的 c++ 文件?它会自动将其变成小写字母

    我正在尝试将 C 文件添加到现有的 Qt 项目中 但无法使 C 文件的名称以大写字母开头 例如 使用向导 DownloadOsm cpp 自动成为 downloadosm cpp 要解决此问题 请执行以下操作 工具 gt 选项 gt C g
  • 缺少 mingwm10.dll

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

    我编写了一个简单的 QML ui 它使用一些 svg 图像 当我在桌面上执行该应用程序时 一切都很好 显示了 UI 以及上面的 svg 图像 当我尝试在嵌入式设备 运行嵌入式 Windows 上执行应用程序时 会出现问题 在这种情况下 会显
  • 如何将 QtCreator 项目转换为 Visual Studio 项目

    我有一个 QtCreator 项目文件 pro 如何将其转换为Visual Studio 2008项目 sln 您还可以使用 qmake 命令来执行此操作 转到项目目录并输入 qmake tp vc
  • 在 QtCreator 中查看数组内容

    调试时是否可以在 Qt Creator 中查看数组的内容 似乎检测到我的数组是一个数组而不是一个指针 此外 我可以点击一个箭头 就像展开一样 但之后什么也没有显示 当我试穿的时候std vector Qt Creator 设法按预期显示内容
  • QML 项目的 QtCreator 中未启用“运行”按钮

    我在Windows XP上使用基于QT 4 7 4 32位 的QTCreator 2 2 1 我从 new gt QML 项目菜单创建了一个 QML 项目 但 RUN 按钮未启用 如何运行 QML 项目 您是否创建了新的 QML 文件而不是
  • 安装多个版本的 Qt 库

    我在windows中安装了QtSDK 它的Qt库版本是4 7 0 现在我想为 mingw 和 VS2008 安装 Qt 库版本 4 8 2 我怎样才能做到这一点 如何向QtCreator引入多个版本 注意 我已经从以下位置下载了库http
  • 程序意外完成 - QT Creator

    我正在尝试使用 QT Creator 使用 QT 框架开发 GUI 控制台应用程序 我使用的是Windows XP 我安装了QT 4 8 3和mingw 两者均已安装 没有任何错误 然后我安装了QT Creator QT 版本 路径中的 Q
  • Qt 创建者 + MITK (Linux)

    我正在尝试使用MITK 与 Qt Creator 我已经通过 ccmake 成功编译并使用了 VTK 和 ITK 我已经编译了 MITK超级建造模式 它下载 CTK VTK ITK 等 然后我就配置好了 我已经用 make 编译了 大约两个
  • Qt 图表和数据可视化小部件

    我已经安装了 Qt 5 7 来尝试 Qt 图表和 Qt 数据可视化 但我在 Qt Designer 和 Qt Creator 中都找不到新的小部件 有什么建议我应该做什么才能让新的小部件出现在设计器中 我今天遇到了完全相同的问题 默认情况下

随机推荐

  • 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 创建子项