Qt5 项目文件.pro参数详解

2023-10-29

qmake的概念

qmake是用来为不同的平台的开发项目创建makefile的一个工具。qmake简化了makefile的生成,因此创建一个makefile只需要几行信息的文件。qmake可以供任何一个软件项目使用,而不用管他是不是使用Qt写成的,尽管它包含了为支持Qt开发所拥有的额外的特征。

项目(.pro)文件

一个项目文件是用来告诉qmake关于为这个应用程序创建makefile所需要的细节。例如,一个源文件和头文件的列表、任何应用程序特定配置。例如,一个必需链接的额外库或者一个额外的包含路径、都应该放到项目文件中。

使用Qt的时候,我们经常会对pro进行一系列繁琐的配置,为方便大家理解、查找,现将常用的配置进行整理。
在这里插入图片描述

配置

注释

以“#”开始,到这一行结束。
快捷键:Ctrl + /

CONFIG

指定编译器选项和项目配置,值由qmake内部识别并具有特殊意义。

以下配置值控制编译标志:

选项 说明
release 项目以release模式构建。如果也指定了debug,那么最后一个生效。
debug 项目以debug模式构建。
debug_and_release 项目准备以debug和release两种模式构建。
debug_and_release_target 此选项默认设置。如果也指定了debug_and_release,最终的debug和release构建在不同的目录。
build_all 如果指定了debug_and_release,默认情况下,该项目会构建为debug和release模式。
autogen_precompile_source 自动生成一个.cpp文件,包含在.pro中指定的预编译头文件。
ordered 使用subdirs模板时,此选项指定应该按照目录列表的顺序处理它们。
precompile_header 可以在项目中使用预编译头文件的支持。
warn_on 编译器应该输出尽可能多的警告。如果也指定了warn_off,最后一个生效。
warn_off 编译器应该输出尽可能少的警告。
exceptions 启用异常支持。默认设置。
exceptions_off 禁用异常支持。
rtti 启用RTTI支持。默认情况下,使用编译器默认。
rtti_off 禁用RTTI支持。默认情况下,使用编译器默认。
stl 启用STL支持。默认情况下,使用编译器默认。
stl_off 禁用STL支持。默认情况下,使用编译器默认。
thread 启用线程支持。当CONFIG包括qt时启用,这是缺省设置。
c++11 启用c++11支持。如果编译器不支持c++11这个选项,没有影响。默认情况下,支持是禁用的。
c++14 启用c++14支持。如果编译器不支持c++14这个选项,没有影响。默认情况下,支持是禁用的。

CONFIG += console (Windows用户)只有针对Windows平台才需要一行

CONFIG += console

其作用是告诉编译器要建立一个“控制台”应用,这种应用能够通过标准的输入/输出流与用户交互。如果使用的是 MS Dev studio,则这个设置与菜单选项 Project Properties->Configuration Properties->Linker->
System->Subsystem->Console 等价。如果没有这个选项,就不会看到发送给 qDebug(),stdout 或者 stderr 的消息。

当使用debug和release选项时(Windows下默认的),该项目将被处理三次:一次生成一个”meta”Makefile,另外两次生成Makefile.Debug和Makefile.Release。

在后面的次数,build_pass和相应的debug或release添加到CONFIG选项。这使得它可以执行构建特定任务。

例如:

build_pass:CONFIG(debug, debug|release) {
    unix: TARGET = $$join(TARGET,,,_debug)
    else: TARGET = $$join(TARGET,,,d)
}

DEFINES

qmake添加这个变量的值作为编译器C预处理器宏(-D选项)。

例如:

DEFINES += USE_MY_STUFF
 
 
 
 

    然后就可以在代码中使用:

    #ifdef USE_MY_STUFF
        // TODO
    #else
        // TODO
    #endif
     
     
     
     

      往往可以指定项目的特殊版本(比如:正式版、试用版)、对一些特殊功能模块(比如:加密狗)进行限制等。

      DEPENDPATH

      指定查看解决依赖关系的目录列表,当包含文件时使用。

      例如:

      DEPENDPATH += . forms include qrc sources
       
       
       
       

        DESTDIR

        指定在何处放置目标文件。

        例如:

        DESTDIR = ../../lib
         
         
         
         

          FORMS

          指定UI文件(参考: Qt Designer Manual)在编译前被uic处理。所有的构建这些UI文件所需的依赖、头文件和源文件都会自动被添加到项目中。

          例如:

          FORMS = mydialog.ui \
                  mywidget.ui \
                  myconfig.ui
           
           
           
           

            HEADERS

            指定项目中所有的头文件。

            qmake会自动检测是头文件的类中是否需要moc,并增加适当的依赖关系和文件到项目中,来生成和链接moc文件。

            例如:

            HEADERS = myclass.h \
                      login.h \
                      mainwindow.h
             
             
             
             

              INCLUDEPATH

              指定编译项目时应该被搜索的#include目录。

              例如:

              INCLUDEPATH = c:/msdev/include d:/stl/include
               
               
               
               

                如果路径包含空格,需要使用引号包含。

                win32:INCLUDEPATH += "C:/mylibs/extra headers"
                unix:INCLUDEPATH += "/home/user/extra headers"
                 
                 
                 
                 

                  LIBS

                  指定链接到项目中的库列表。如果使用Unix -l (library) 和 -L (library path) 标志,在Windows上qmake正确处理库(也就是说,将库的完整路径传递给链接器),库必须存在,qmake会寻找-l指定的库所在的目录。

                  例如:

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

                    如果路径包含空格,需要使用引号包含路径。

                    win32:LIBS += "C:/mylibs/extra libs/extra.lib"
                    unix:LIBS += "-L/home/user/extra libs" -lextra
                     
                     
                     
                     

                      MOC_DIR

                      指定来自moc的所有中间文件放置的目录(含Q_OBJECT宏的头文件转换成标准.h文件的存放目录)。

                      例如:

                      unix:MOC_DIR = ../myproject/tmp
                      win32:MOC_DIR = c:/myproject/tmp
                       
                       
                       
                       

                        OBJECTS_DIR

                        指定所有中间文件.o(.obj)放置的目录。

                        例如:

                        unix:OBJECTS_DIR = ../myproject/tmp
                        win32:OBJECTS_DIR = c:/myproject/tmp
                         
                         
                         
                         

                          QT

                          指定项目中使用Qt的模块。默认情况下,QT包含core和gui,以确保标准的GUI应用程序无需进一步的配置就可以构建。

                          如果想建立一个不包含Qt GUI模块的项目,可以使用“ -=”操作符。

                          下面一行将构建一个很小的Qt项目:

                          QT -= gui # 仅仅使用core模块
                           
                           
                           
                           

                            如果要创建一个界面,里面用到XML及网络相关的类,那么需要包含如下模块:

                            QT += core gui widgets xml network
                             
                             
                             
                             

                              如果你的项目是一个Qt Designer插件,使用值uiplugin指定项目构建成库,但特定的Qt Designer插件支持,请参考:Building and Installing the Plugin。

                              RCC_DIR

                              指定Qt资源编译器输出文件的目录(.qrc文件转换成qrc_*.h文件的存放目录)。

                              例如:

                              unix:RCC_DIR = ../myproject/resources
                              win32:RCC_DIR = c:/myproject/resources
                               
                               
                               
                               

                                RESOURCES

                                指定资源文件 (qrc) 的名称,参考:Qt之资源系统

                                例如:

                                RESOURCES += Resource/resource.qrc
                                 
                                 
                                 
                                 

                                  RC_FILE

                                  指定应用程序资源文件的名称。这个变量的值通常是由qmake或qmake.conf处理,很少需要进行修改。

                                  例如:

                                  RC_FILE += myapp.rc
                                   
                                   
                                   
                                   

                                    RC_ICONS

                                    仅适用于Windows,指定的图标应该包含在一个生成的.rc文件里。如果RC_FILE 和RES_FILE变量都没有设置这才可利用。

                                    例如:

                                    RC_ICONS = myapp.ico  
                                     
                                     
                                     
                                     

                                      SOURCES

                                      指定项目中所有源文件。

                                      例如:

                                      SOURCES = myclass.cpp \
                                                login.cpp \
                                                mainwindow.cpp
                                       
                                       
                                       
                                       

                                        TARGET

                                        指定目标文件的名称。默认情况下包含的项目文件的基本名称。

                                        例如:

                                        TEMPLATE = app
                                        TARGET = myapp
                                        SOURCES = main.cpp
                                         
                                         
                                         
                                         

                                          上面项目会生成一个可执行文件,Windows下为myapp.exe,Unix下为myapp。

                                          TEMPLATE

                                          模板变量告诉qmake为这个应用程序生成哪种makefile。

                                          可供使用的选项:

                                          选项 说明
                                          app 创建一个用于构建应用程序的Makefile(默认)。
                                          lib 创建一个用于构建库的Makefile。
                                          subdirs 创建一个用于构建目标子目录的Makefile,子目录使用SUBDIRS变量指定。
                                          aux 创建一个不建任何东西的Makefile。如果没有编译器需要被调用来创建目标,比如你的项目使用解释型语言写的,使用此功能。注:此模板类型只能用于Makefile-based生成器。特别是,它不会工作在vcxproj和Xcode生成器。
                                          vcapp 仅适用于Windows。创建一个Visual Studio应用程序项目。
                                          vclib 仅适用于Windows。创建一个Visual Studio库项目。

                                          例如:

                                          TEMPLATE = lib
                                          SOURCES = main.cpp
                                          TARGET = mylib
                                           
                                           
                                           
                                           

                                            TRANSLATIONS

                                            指定包含用户界面翻译文本的翻译(.ts)文件列表。

                                            例如:

                                            TRANSLATIONS += Resource/myapp_zh.ts \
                                                            Resource/myapp_en.ts
                                             
                                             
                                             
                                             

                                              UI_DIR

                                              指定来自uic的所有中间文件放置的目录(.ui文件转化成ui_*.h文件的存放目录)。

                                              例如:

                                              unix:UI_DIR = ../myproject/ui
                                              win32:UI_DIR = c:/myproject/ui
                                               
                                               
                                               
                                               

                                                总结:

                                                Qt程序的编译执行过程:(1) 创建.pro文件,(2) 由.pro文件生成Makefile文件,(3) Makefile中保存了编译器和链接器的参数选项,还表述了所有源文件之间的关系(源文件需要的特定的包含文件,可执行文件要求包含的目标文件模块及库等),(4) 创建程序(make),读取Makefile文件,然后激活编译器,汇编器,资源编译器和链接器等以便产生最后的输出,最后输出生成通常是可执行文件。

                                                更多参考

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

                                                Qt5 项目文件.pro参数详解 的相关文章

                                                • 如何获取 QTableView 的标题列表?

                                                  我有一个QTableView我的对话框中的对象 我需要访问该表的水平标题并将它们放入QStringList object 尽管进行了大量搜索 但我在 Qt 文档中找不到如何获取此标头列表 编辑 我发现的最接近的地方是this https w
                                                • QFileDialog::getSaveFileName 和默认的 selectedFilter

                                                  我有 getSaveFileName 和一些过滤器 我希望当用户打开 保存 对话框时选择其中之一 Qt 文档说明如下 可以通过将 selectedFilter 设置为所需的值来选择默认过滤器 我尝试以下变体 QString selFilte
                                                • Qt 布局,在小部件大小更改后调整到最小大小

                                                  基本上我有一个QGridLayout里面有一些小部件 最重要的是 2 个标签 我用它们将图像绘制到屏幕上 好吧 如果用户愿意 他可以更改传入图像的分辨率 从而强制标签调整大小 我们假设标签的初始大小是320x240 用户将 VideoMod
                                                • 在 MacOS 终端上运行 ffmpeg [关闭]

                                                  Closed 这个问题是无关 help closed questions 目前不接受答案 我对 MacOS 相当陌生 我发现使用终端来获取信息并不容易ffmpeg和我在 Window 上一样正常运行 我有 ffmpeg 二进制文件ffmpe
                                                • PyQt5:如何使QThread返回数据到主线程

                                                  I am a PyQt 5 4 1 1初学者 我的Python是3 4 3 这是我尝试遵循的many https mayaposch wordpress com 2011 11 01 how to really truly use qthr
                                                • Qt - 无法让 lambda 工作[重复]

                                                  这个问题在这里已经有答案了 我有以下功能 我想在其中修剪我的std set
                                                • 如何为 Windows 构建静态 Qt 库并将其与 Qt Creator 一起使用

                                                  我已经下载了以下 Qt 源 http download qt nokia com qt source qt everywhere opensource src 4 7 3 zip http download qt nokia com qt
                                                • 是否可以在 Qt Creator 中将 Qt 样式表与升级的小部件一起使用?

                                                  我正在尝试使用 Qt 样式表对标准小部件进行一些重大的重新设计 因此 在为不同的小部件手动完成大部分工作之后 objectName选择器 我决定以某种方式对类似的小部件进行分组 例如我有多个QFrames其作用类似于内部表单中的标题 我希望
                                                • 为什么 QGraphicsWidget 的选择边框在 QGraphicsScene 中不可见?

                                                  我已经通过一个小部件添加到图形场景 QGraphicSscene QGraphicsProxyWidget 问题是 当我选择该项目时 它被选中 但选择边框不可见 这是代码 QDial dial new QDial Widget dial g
                                                • Qt GUI 应用程序中的控制台输出?

                                                  我有一个在 Windows 上运行的 Qt GUI 应用程序 它允许传递命令行选项 在某些情况下我想向控制台输出一条消息 然后退出 例如 int main int argc char argv QApplication a argc arg
                                                • 如何从 matlab 调用 Qtproject?

                                                  我在 matlab 中有一个函数可以写入一个 file txt 我在 qt 项目中使用它 So 当我使用 unix 获取要运行的 qt 编译可执行文件时 我有一个 Matlab 文件 但出现错误 代码 unix home matt Desk
                                                • QWidget::showMinimized() 不起作用

                                                  在 Ubuntu 13 04 上 如果使用QWidget showMinimized 为了最小化窗口 我发现通过单击系统任务栏上的应用程序图标恢复它后 调用QWidget showMinimized 无法工作 connect minimum
                                                • 当从 html 文件读取 Unicode 内容时,为什么 Unicode 字体在 QTextBrowser 中无法正确显示?

                                                  我正在读一本html文件 该文件基本上包含Unicode案文如下 b akko sati kru akkh ti khy abbahati b h b But the QText浏览器不解释Unicode字体 所以QText浏览器显示如下
                                                • 面向 Delphi 开发人员的 Qt

                                                  有人知道为 Delphi C Builder VCL 开发人员解释 Qt 的书籍或教程吗 对于具有该背景的开发人员来说 学习 Qt 的最佳方法是什么 我对如何使用 Qt 完成我知道如何在 Delphi 中完成的事情特别感兴趣 例如 Qt 相
                                                • 选择合适的IDE

                                                  您会推荐使用以下哪种 IDE 语言来在 Windows 下开发涉及识别手势并与操作系统交互的项目 我将使用 OpenCV 库来执行图像处理任务 之后 我将使用 win32 API 或 NET 框架与操作系统交互 具体取决于您建议的工具 性能
                                                • 包含 Qt 标头的正确方法是什么?

                                                  到目前为止我知道几种方法 includeQt 类 include
                                                • QObject多重继承

                                                  我正在尝试在 C Qt 类中使用 mix 来提供一大堆具有通用接口的小部件 该接口是以这样的方式定义的 如果它被定义为其他小部件类的基类 那么小部件本身将具有这些信号 class SignalInterface public QObject
                                                • 将 C++ 代码(本机客户端)移植到浏览器(Web 应用程序)

                                                  我有一个使用 Qt creator SDK 编写的 C 模块 我想将此代码移植到任何网页上运行 而不会对最终用户损害源代码 用户应该能够在任何浏览器 Chrome Firefox Safari Explorer 上看到此模块的输出 而无需安
                                                • QPainterPath::arcTo 上的角度如何解释?

                                                  我正在开发图形编辑器的功能 在其中编辑弧线 当形状是椭圆形时 QPainterPath arcTo 的行为并不像我预期的那样 当它是一个圆圈时 它会按预期工作 下面的两张图片显示了结果 在第一种情况下 我创建了一个圆 然后将其转换为初始起始
                                                • PyQt 和 QSignalMapper/lambdas - 多个信号,单槽

                                                  我在 PyQt 的菜单上有一个操作列表 每个操作对应我想要显示的每个不同的提要 所以我有一个 Y 将活动源设置为 Y Z 将其设置为 Z 等等 对于网络漫画阅读程序 我的菜单上都有 并且觉得自动化方法可能更好 而不是每次都打字 类似于将其添

                                                随机推荐

                                                • 小试牛刀1:使用Python-OpenCV 实现一副图片的高斯模糊处理

                                                  实验步骤 1 环境 安装好python3 x opencv3 3 window下 2 高斯模糊 概念 高斯模糊本质上是低通滤波器 输出图像的每个像素点是原图像上对应像素点与周围像素点的加权和 使用cv2做高斯模糊 只要一行代码调用Gauss
                                                • 微信小程序页面栈_小程序页面栈详解

                                                  在做小程序项目的时候不难发现 使用navigateTo进行页面跳转后 点击左上角或使用navigateBack返回 总是会按照之前的页面进入倒序来展示页面 那么问题来了 它们的跳转规则是什么样的呢 结合到实际业务中如何灵活运用呢 什么是页面
                                                • No SOURCES given to target: xxx

                                                  文章目录 一 问题描述 二 解决办法 一 问题描述 CMake Error at CMakeLists txt add executable Cannot find source file src rs capture cpp Tried
                                                • 关于搭建简易广域网私人通信程序(python)一步到位!

                                                  原料 python3 腾讯云服务器 用到的库 socket sys threading time pyinstaller 除pyinstaller外均不需单独安装 首先 默认已经买好云服务器 且安装好了python3 此处使用腾讯云服务器
                                                • csv文件的读与写

                                                  csv文件的读取与写入 1 csv文件的读取 import pandas as pd csv path dataA1 csv df pd read csv csv path 可以通过csv文件的表头读取出某一列 表头见下图 print it
                                                • 理解inode

                                                  inode是一个重要概念 是理解Unix Linux文件系统和硬盘储存的基础 我觉得 理解inode 不仅有助于提高系统操作水平 还有助于体会Unix设计哲学 即如何把底层的复杂性抽象成一个简单概念 从而大大简化用户接口 下面就是我的ino
                                                • 华为OD机试真题-基站维护最短距离 【2023.Q1】

                                                  参考代码 小王是一名基站维护工程师 负责某区域的基站维护 某地方有n个基站 1
                                                • Android中的签名和签名文件的生成过程

                                                  一 概述 二 还是从Key Store和keytool说起吧 三 数字签名和数字证书 四 apk的签名过程 五 签名中 MANIFEST MF CERT SF和 CERT RSA是怎么生成的 1 MANIFEST MF 2 CERT SF
                                                • QT日志系统创建,读取,修复

                                                  一 内容简介 构建QT日志系统 遇到的问题以及结局办法 读取日志文件 用于检查程序运行情况 并且修复异常数据 二 软件环境 2 1 QT 5 14 1 新版QT6 4 6 5在线安装经常失败 而5 9版本又无法编译64位程序 所以就采用5
                                                • 巧用千寻位置GNSS软件

                                                  千寻位置GNSS软件中的CAD功能 用于已有 CAD的图形的导入和编辑 并且可以对 CAD图形已有线条进行线放样 在日常测绘工作中十分常见 下面向各位介绍CAD功能的使用技巧 点击 测量 gt CAD 进入 CAD功能如图 5 3 1所示
                                                • 显卡无法为此计算机,如何解决win10系统电脑中无法安装intel显卡驱动的问题

                                                  如何解决win10系统电脑中无法安装intel显卡驱动的问题 腾讯视频 爱奇艺 优酷 外卖 充值4折起 在使用win10系统电脑的时候 如果我们想要安装intel显卡驱动 却提示无法安装的话 应如何处理呢 接下来就由小编来告诉大家 一 手动
                                                • CentOS7(Linux)安装总结

                                                  主要参考以下文章 CentOS7 Linux 详细安装教程 图文详解 缄默 給 傷的博客 CSDN博客 linuxcentos7安装步骤https blog csdn net weixin 43849575 article details
                                                • Mutex内核同步机制详解

                                                  一 Mutex锁简介 在linux内核中 互斥量 mutex 即mutual exclusion 是一种保证串行化的睡眠锁机制 和spinlock的语义类似 都是允许一个执行线索进入临界区 不同的是当无法获得锁的时候 spinlock原地自
                                                • 使用VNC远程桌面Ubuntu【内网穿透实现公网远程】

                                                  文章目录 前言 1 ubuntu安装VNC 2 设置vnc开机启动 3 windows 安装VNC viewer连接工具 4 内网穿透 4 1 安装cpolar 支持使用一键脚本命令安装 4 2 创建隧道映射 4 3 测试公网远程访问 5
                                                • 【深度学习】 Python 和 NumPy 系列教程(十五):Matplotlib详解:2、3d绘图类型(1):线框图(Wireframe Plot)

                                                  目录 一 前言 二 实验环境 三 Matplotlib详解 1 2d绘图类型 2 3d绘图类型 0 设置中文字体 1 线框图 Wireframe Plot 一 前言 Python是一种高级编程语言 由Guido van Rossum于199
                                                • Qt事件过滤器

                                                  有时候 对象需要查看 甚至要拦截发送到另外对象的事件 例如 对话框可能想要拦截按键事件 不让别的组件接收到 或者要修改回车键的默认处理 通过前面的章节 我们已经知道 Qt 创建了 QEvent 事件对象之后 会调用 QObject 的 ev
                                                • dll 导出函数名的那些事

                                                  经常使用VC6的Dependency查看DLL导出函数的名字 会发现有DLL导出函数的名字有时大不相同 导致不同的原因大多是和编译DLL时候指定DLL导出函数的界定符有关系 VC 支持两种语言 即C C 这也是造成DLL导出函数差异的根源
                                                • 2019年,iOS开发的你准备何时跳槽?

                                                  序言 我相信很多人都在说 iOS行业不好了 iOS现在行情越来越难了 失业的人比找工作的人还要多 失业即相当于转行 跳槽即相当于降低自己的身价 那么做iOS开发的你 你是否在时刻准备着跳槽或者转行了 我们先看一下现在iOS行业 iOS程序员
                                                • 人脸修复祛马赛克算法CodeFormer——C++与Python模型部署

                                                  一 人脸修复算法 1 算法简介 CodeFormer是一种基于AI技术深度学习的人脸复原模型 由南洋理工大学和商汤科技联合研究中心联合开发 它能够接收模糊或马赛克图像作为输入 并生成更清晰的原始图像 算法源码地址 https github
                                                • Qt5 项目文件.pro参数详解

                                                  qmake的概念 qmake是用来为不同的平台的开发项目创建makefile的一个工具 qmake简化了makefile的生成 因此创建一个makefile只需要几行信息的文件 qmake可以供任何一个软件项目使用 而不用管他是不是使用Qt