Qt之工程文件

2023-10-27

Qt之工程文件

https://blog.csdn.net/adriano119/article/details/5878169

https://www.yuque.com/youyouwoxin-adiw5/eae3th/xiqrgw

主要内容来自于网络和上面两篇链接,摘录是为了方便使用。

在QT中,有一个工具qmake可以生成一个makefile文件,它是由.pro文件生成而来的,.pro文件的写法如下:

1、注释

从“#”开始,到这一行结束。

2、QT+=

这是添加QT项目需要的模块的,若项目中要排除某个模块,也可用QT -= 配置项。

3、模板变量 TEMPLATE

这个配置项确定qmake为这个应用程序生成哪种makefile 。有下面五种形式可供选择:

1)app : 建立一个应用程序,这个是默认值,若模块项未指定,将默认使用此项;

2)lib : 建立一个库;比如:动态库、静态库文件

3)vcapp: 建立一个应用程序的VisualStudio项目文件;

4)vclib : 建立一个库的VisualStudio项目文件;

5)subdirs : 这是一个特殊的模板,可以创建一个工程集目录

subdirs 举例:

TEMPLATE = subdirs

SUBDIRS =\
        raknet\
        onetengine \
        omisc \
        testDebugShow
 
onetengine.depends = raknet omisc
testDebugShow.depends = omisc

#CONFIG += ordered
  1. TEMPLATE=subdirs 这是固定写法,声明是做工程集目录的
  2. SUBDIRS 是指明目录中有哪些项,可以嵌套另一个subdirs型的pro
  3. 接下来可以详细定义其中的项目,如 xxx.depends=yyy,表示左边的依赖=后面的项目

相关参数:

.subdir 指定子项的目录,不使用子项本身的名字.
.file 明确指定该子项使用的pro文件,默认是根据名字自动找的,该项不和.subdir同时使用
.condition 指定要生成的子项目必须为true的bld.inf定义。仅在Symbian平台上可用。
.depends 该子项依赖指定的子项,只在使用makefiles的平台有效
.makefile 该子项的makefile,只在使用makefiles的平台有效
.target 该子项的TARGET,只在使用makefiles的平台有效
  1. 使用 subdirs =a b c d声明的其实是4个子项的名字
  2. 默认不多做说明的话,qmake 根据名字自动去找子目录,启用子目录中的pro文件(名字优先匹配).
  3. 如果有特别说明,比如: a.subdir=./z 或者 a.file=./z/z.pro 就可以不受名字限制。
  4. 至于.makefile,应该是你混用第三方库的时候才有必要手动指定使用的makefile
  5. . target 可以在子pro中指定,除非你觉得这里比较统一方便修改

4. TARGET =

这个配置项用来指定最后生成的目标应用程序的名称。名字不做修饰(不加.a/.lib/.dll)的好处是让qt帮我们加,在不同平台不用我们考虑差别.

5. CONFIG +=

用来告诉qmake关于应用程序的配置信息,使用+=表示在现有的配置上添加,这样会更安全。比如,CONFIG += qt warn_on release 其具体的意义为:

qt :告诉qmake此程序是使用qt来连编的。即qmake在连接、为编译添加所需包含路径时会考虑qt的库;warn_on :告诉qmake要将编译器设置为输出警告信息形式;release :告诉qmake应用程序必须被连编为一个可发布的应用程序。开发过程中,也可以使用debug

6、控制输出目录

6.1、UIC_DIR += :

用来指定uic命令,将.ui文件转化为ui_*.h文件存放的目录。

6.2、RCC_DIR += :

用来指定rcc命令,将.qrc文件转换成qrc_*.h文件存放的目录。

6.3、MOC_DIR += :

用来指定moc命令,将含有Q_OBJECT的头文件转换成标准.h文件存放的目录。

6.4、OBJECTS_DIR += :

用来指定目标文件obj的存放目录。

6.5、DESTDIR += :

用来指定目标的生成路径。

7. DEPENDPATH += :

列出依赖项所在的路径。当处理included文件时会使用该项。

8. INCLUDEPATH += :

列出工程中 #include 项需要搜索的路径,即头文件的路径。

多个路径用空格隔开。如果路径本身包含空格,则需要用双引号引起来。

9. CODECFORSRC += :

源文件编码方式

CODECFORSRC = GBK

10、源代码文件目录

10.1、FORMS += :

用来指定工程中的ui文件。

10.2、 HEADERS += :

用来指定工程中所包含的头文件。

10.3、SOURCES += :

用来指定工程中包含的源文件。

10.4、RESOURCES += :

用来指定工程中所包含的资源文件。

10.5、RC_FILE = xxx.icns

RC_FILE = myapp.rc

IDI_ICON1 ICON “myappico.ico” windows

或者 直接使用

RC_ICONS = myappico.ico windows

或者

ICON = myapp.icns mac

11、LIBS += :

指定工程里需要链接的库文件(.lib或.dll)。根据不同的版本可以分为两种形式:

Release: LIBS += -L folder Path

//release版本引入的

lib

文件

Debug: LIBS += -L folder Path

​ //debug版本引入的

lib

文件

通常用Unix风格,大写的L表示“路径”,小写的l表示“库文件名字”。如

unix:LIBS += -``**L**``/usr/local/lib -``**l**``math
win32:LIBS += c:/mylibs/math.lib

12、DEFINES += :

qmake添加该字段指定的全局宏定义。VS中也有类似的全局宏定义,在.dll工程中经常用到,来指定是 dllexport 还是 dllimport .

  • 屏蔽告警信息和调试输出

    DEFINES +=  QT_NO_WARNING_OUTPUT\
                QT_NO_DEBUG_OUTPUT
    
  • 自定义宏

    DEFINES += FUNDLL_LIBRARY
    

    在头文件中使用上述宏定义:

    #if defined(FUNDLL_LIBRARY)
    #define FUNDLLSHARED_EXPORT __declspec(dllexport)
    #else
    #define FUNDLLSHARED_EXPORT __declspec(dllimport)
    #endif
    

13、变量PWD

表示当前.pro文件所在的路径。

INCLUDEPATH += $$PWD/…/mydll

14、变量OUT_PWD

表示输出的“Makefile”所在的路径(通常在编译后生成的.exe文件的上层目录里)。

LIBS += -L$$OUT_PWD/…/funDll/ -lfunDll

15. 跨平台处理信息

跨平台处理信息也要写在.pro文件中, 其示例如下:

win32{
}
unix{
}

16 pri文件

使用pri文件可以进行工程模块化管理

  • 新工程中,新建一个xxx.pri文件,在pro文件中,include这个pri文件,

include (xxx.pri) // 使用像一个函数

​ pri文件并没有那么神秘,它完全可以被看作一个子 Pro 文件。就像头文件之间的包含关系一样,你可以将pri文件包含在Pro文件中,那么在Pro就可以运用到pri文件下内容了。只不过你不能在pri文件中包含Pro文件。

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

Qt之工程文件 的相关文章

  • CMake AUTOMOC,文件位于不同文件夹中

    我有一个简单的 CMake 项目 proj project folder a h a cpp CMakeLists txt CMakeLists txt cmake minimum required VERSION 3 2 set CMAK
  • 相对文件路径的区别:Qt Creator的调试模式和发布模式

    QFile file test txt if file open QIODevice ReadOnly qDebug lt lt You got me 我在用 Qt 4 8 6 与 MSVC 2010 Qt 创建者 3 1 1 Window
  • QWebEngineView 在 load() 或 page() 方法上崩溃

    我正在致力于将 Qt 5 5 QWebView 项目移植到 Qt 5 6 测试版 QWebEngine 我已经阅读了移植指南here https wiki qt io Porting from QtWebKit to QtWebEngine
  • PyQt5 使动态小部件可点击并将参数传递给另一个函数

    我正在尝试制作动态小部件并使它们可点击 通过单击一个小部件 它应该将动态值传递给其他小部件 我尝试过 sender 和其他访问小部件的选项 但没有任何效果 所有小部件都从最后一个小部件发送信息 下面是代码 import sys from P
  • 日历小部件的特定单元格如何着色?

    日历小部件的特定单元格如何着色 我认为你应该扩展 QCalendar 类并添加一些行为 我在这里找到了一些东西 http www qtforum org article 21614 paintcell and qcalendarwidget
  • 如何为QTableView中的当前项目设置样式表

    When QTableView编辑控件对于发生编辑的当前项目可见 当窗口中没有活动的编辑控件时QTableView当前项目的样式使用QTableView selection background color 如何只为当前项目设置不同的样式
  • QtCreator:找不到有效的套件

    在 Windows 7 上仅安装了 IDE 我想创建一个纯 C 项目 非 QT 项目 但是我收到错误 未找到有效的套件 当我单击 选项 gt 套件 时 我看到桌面 默认 套件 并且没有显示任何错误 我收到错误是因为我没有安装 Qt 库吗 如
  • 仅使 QTreeWidgetItem 的一列可编辑

    我有一个QTreeWidgetItem有两列数据 有什么办法可以只让第二列可编辑吗 当我执行以下操作时 QTreeWidgetItem item new QTreeWidgetItem item gt setFlags item gt fl
  • QImage 转换为 QML

    我的应用程序通过网络接收 JPEG 实时流 每秒 16 帧 直播流应使用 QML 显示 接收部分是用C 编写的 所有UI都是用QML编写的 如何将图像数据输入 QML 窗口 我已经研究过如何显示 QImage 但还没有找到解决方案 实现 Q
  • 从 QTableView 读取和写入文件

    如何读取和写入输入 QTableView 的文本文件日期 这就是我所拥有的 但我想在将数据添加到表中时保存数据 当然能够在重新打开应用程序时读回它 有什么教程可以参考吗 MainWindow MainWindow QWidget paren
  • QSettings - ini 文件的位置在哪里?

    我在用着QSettings在 Windows 中将一些数据存储为 ini 文件 我想查看ini文件 但我不知道ini文件的位置在哪里 这是我的代码 QSettings set new QSettings QSettings IniForma
  • 如何防止 QTableView 项目在双击时被清除

    使用 QAbstractTableModel 将 QTableView 设置为可编辑flag method def flags self index return Qt ItemIsEnabled Qt ItemIsSelectable Q
  • Qt 中的智能指针[重复]

    这个问题在这里已经有答案了 就像已经写过一样here http blog qt digia com 2009 08 25 count with me how many smart pointer classes does qt have Q
  • Row 和 RowLayout 有什么区别?

    这按预期工作Row 但不与RowLayout 为什么 两者有什么区别 ApplicationWindow title Testing width 640 height 480 RowLayout Row anchors fill paren
  • 防止 QGraphicsItem 移出 QGraphicsScene

    我有一个场景 其固定尺寸从 0 0 到 481 270 scene gt setSceneRect 0 0 481 270 在里面 我有一个习惯GraphicsItem多亏了旗帜我可以移动它ItemisMovable 但我希望它留在场景中
  • 如何检查QProcess是否正确执行?

    QProcess process sdcompare QString command sdcompare QStringList args sdcompare command sdcompare diff args sdcompare lt
  • Qt 模型/视图与标准小部件

    我目前正在阅读模型 视图tutorial http qt project org doc qt 4 8 modelview html来自 Qt 但我仍然不确定是否应该为我的 Qt 程序使用模型 视图或小部件 我需要做一个记录器应用程序来监视
  • 创建一个没有按钮的 QMessageBox

    尽管设置了 setStandardButtons 0 它不会关闭 msgBox QMessageBox msgBox msgBox setText My List msgBox setStyleSheet QDialog border 1p
  • 是否可以将 QWidget 作为 QObject 的子级?

    我的主要应用程序对象是QObject 它兼顾了QSystemTrayIcon a QDialog a QWindow和一些其他组件 该应用程序主要位于托盘中 带有一些选项对话框等 现在 我想使用QMetaObject connectSlot
  • qml 和 c++ 以及 qt Quick 2 应用程序

    我的主窗口有一个 qml GUI 我刚刚创建了一个 qt Quick2 应用程序 并将主窗口的 qml GUI 复制并粘贴到 main qml 当我运行该应用程序时 它显示空白窗口 以下是我的 qml 日志 QML debugging is

随机推荐

  • 【Ubuntu使用技巧】Ubuntu20.04为 AppImage 文件创建快捷方式_附matlab 2021b的desktop文件

    参考文献 ubuntu20 04 为 AppImage 文件创建应用程序启动器 快捷方式 0 给AppImage软件添加可执行权限 在你想要创建快捷方式的应用中新建文件 touch xx desktop 在上面的文件中填入内容 注意修改Ex
  • ClassNotFoundException: com.alibaba.spring.beans.factory.annotation.AnnotationInjectedBeanPostProces

    在整合Dubbo与Springboot报的错误 在parent模块原有的基础上添加如下依赖解决问题
  • chatgpt赋能python:使用Python制作动画的步骤和工具

    使用Python制作动画的步骤和工具 Python不仅是一种流行的编程语言 还可以用于制作动画 本文将介绍一些基本步骤和工具 帮助你制作出精美的动画作品 步骤一 选择一个好的动画框架 Python有很多强大的动画框架可以使用 其中一些最受欢
  • bak文件、vim、.DS_Store文件

    bak文件泄露 有些时候网站管理员可能为了方便 会在修改某个文件的时候先复制一份 将其命名为xxx bak 而大部分Web Server对bak文件并不做任何处理 导致可以直接下载 从而获取到网站某个文件的源代码 常见的网站源码的文件名有
  • 克隆get项目报错 OpenSSL SSL_read: Connection was reset, errno 10054解决办法

    克隆get项目报错 OpenSSL SSL read Connection was reset errno 10054解决办法 通过报错我们看到这个问题是链接被重置 问题 解决方法 在命令号修改设置解除ssl验证 git config gl
  • 强化学习中的马尔可夫决策过程,常见公式回顾

    0 基础知识 0 1 贝尔曼方程 这个公式是强化学习的核心 其中 s 可以看成未来的某个状态 p s s 是指从当前状态转移到未来状态的概率 V s 代表的是未来某一个状态的价值 我们从当前状态开始 有一定的概率去到未来的所有状态 所以我们
  • Vite2 + Vue3 + TypeScript + Pinia 搭建一套企业级的开发脚手架

    Vue2 与 Vue3 的区别 Vue3由于完全由TS进行重写 在应用中对类型判断的定义和使用有很强的表现 同一对象的多个键返回值必须通过定义对应的接口 interface 来进行类型定义 要不然在 ESLint 时都会报错 Vue2 与
  • Java从入门到实战总结-3.7、XML和JSON

    Java从入门到实战总结 3 7 XML和JSON 文章目录 Java从入门到实战总结 3 7 XML和JSON 1 前言 2 XML介绍 1 XML概述 2 用途 3 处理器与应用 4 标记 Markup 与内容 content 5 标签
  • java 利用方法实现数组之间的传递

    import java util public class HelloWorld public static void main String args int arr 1 2 3 int output transform arr 运用tr
  • springboot打印启动信息

    打印启动信息 param application 应用 SneakyThrows private static void printMsg ApplicationContext application String ip InetAddre
  • vuex(4.x)

    1 简介 vuex状态管理插件 在vue最重要就是数据驱动和组件化 每个组件都有自己的data template和methods data是数据 我们也叫做状态 通过methods中方法改变状态来更新视图 在单个组件中修改状态更新视图是很方
  • vue - mvvm模式的理解?

    1 MVVM 是Model View ViewModel 的缩写 它是一种基于前端开发的架构模式 其核心是提供对View 和 ViewModel 的双向数据绑定 2 MVVM 中的核心 VM vm负责连接 View 和 Model 保证视图
  • Python如何永久修改sys.path

    Python如何永久修改sys path 起因 这两天运行需要用命令行来运行python文件 但是总是报错ModuleNotFoundError No module named xxx tf liushanlin liushanlindeM
  • 解决Fastjson的下划线与大小写映射问题

    一 问题场景 目前我有一个类如下所示 Data ToString class BTEST Long infoId Long info id 需要执行的方法如下 Test public void jsonToBean Map
  • python3使用pykeyboard和Pyhook的问题及解决

    python3 7无法import pykeyboard的原因 问题1 ModuleNotFoundError No module named windows 问题2 cant import name PyKeyboard from pkk
  • python(列表、元组、字典)详解

    文章目录 什么是列表 列表的定义 in max min sum在列表中的使用 操作列表 初识元组 元组定义 列表与元组的区别 初识字典 字典的结构与创建方法 字典的遍历 字典支持的数据类型 循环 什么是列表 列表就是队列 是各种数据类型的集
  • 关于数论中的互质数的最大不能组合数

    题意 给定A和B A和B互质 求最大不能组合数 和不能组合数的个数 基础知识 Gcd A B 1 Lcm A B AB剩余类 把所有整数划分成m个等价类 每个等价类由相互同余的整数组成任何数分成m个剩余类 分别为 mk mk 1 mk 2
  • 新论文石锤Transformer:别只看注意力,没有残差和MLP,它啥都不是

    作者 青暮 基于注意力的架构在机器学习社区中已经变得无处不在 Transformer最初在机器翻译打出名堂 随着BERT的问世几乎统治了整个NLP领域 RNN LSTM等老前辈瑟瑟发抖 GPT 3的零样本学习能力又令人不禁怀疑其智能本质 还
  • 简单几步,让Mac外接显示器更好用

    光懂得给MacBook连接外置显示器还不行 了解这几点 才能让Mac外接显示器更好用 可以在两个显示器桌面之间任意拖拽移动软件窗口 这也是双 多 显示器一个高效的地方 将外接显示器设置为最佳分辨率 MacBook连接上外接显示器后 打开 系
  • Qt之工程文件

    文章目录 1 注释 2 QT 3 模板变量 TEMPLATE 4 TARGET 5 CONFIG 6 控制输出目录 6 1 UIC DIR 6 2 RCC DIR 6 3 MOC DIR 6 4 OBJECTS DIR 6 5 DESTDI