【整理】QT .pro文件中的变量说明

2023-10-27

注释

以”#”开始的行,直到结束

模板变量

告诉qmake生成哪种makefile

TEMPLATE = app

其中

  • app - 表示该工程建立一个应用程序的makefile。这是默认值,所以如果模板没有被指定,这个将被使用
  • lib - 表示该工程建立一个库的makefile
  • subdir - 生成针对子目录的Makefile,子目录由变量SUBDIRS指定;
  • vcapp - 生成用于VS开发环境的软件工程(只用于windows系统);
  • vclib - 生成用于VS开发环境的库工程(只用于windows系统);

生成目录

指定生成的可执行程序的目录,可以绝对和相对路径

DESTDIR += ../bin

生成的应用程序名

软件名

TARGET = qtest

编译选项

增添或者移除某个模块、指定编译器所要使用的选项,其可用选项如下:

  • 下面这些选项控制着使用哪些编译器标志:
    • release - 应用程序将以release模式连编。如果“debug”被指定,它将被忽略。
    • debug - 应用程序将以debug模式连编。
    • warn_on - 编译器会输出尽可能多的警告信息。如果“warn_off”被指定,它将被忽略。
    • warn_off - 编译器会输出尽可能少的警告信息。
  • 下面这些选项定义了所要连编的库/应用程序的类型:
    • qt - 应用程序是一个Qt应用程序,并且Qt库将会被连接。
    • thread - 应用程序是一个多线程应用程序。
    • x11 - 应用程序是一个X11应用程序或库。
    • windows - 只用于“app”模板:应用程序是一个Windows下的窗口应用程序。
    • console - 只用于“app”模板:应用程序是一个Windows下的控制台应用程序。
    • dll - 只用于“lib”模板:库是一个共享库(dll)。
    • staticlib - 只用于“lib”模板:库是一个静态库。
    • plugin - 只用于“lib”模板:库是一个插件,这将会使dll选项生效。

增添C++11和console支持,Qt的各模块

CONFIG += console c++11 network
CONFIG -= qt

可以用空格分隔或者”\”来隔行。

目标文件目录

obj文件存放的目录,可以绝对或相对路径

OBJECTS_DIR += ../tmp

工程中包含的头文件
表示本工程中的头文件

HEADERS += \
    libcurl/curl/curl.h \
    libcurl/curl/curlbuild.h \
    libcurl/curl/curlrules.h \

只要qtcreator目录树里add进去了就自动添加

工程中包含的源文件

表示本工程中的源文件

SOURCES += mytest.cpp\
           main.cpp

只要qtcreator目录树里add进去了就自动添加

工程中包含的.ui设计文件

FORMS += forms/painter.ui

工程中包含的资源文件

表示本工程包含的资源文件

RESOURCES += qrc/painter.qrc

只要qtcreator目录树里add进去了就自动添加,更改pro文件会同步更新qtcreator里的目录树,但不会影响硬盘上的资源文件

附加头文件包含目录

一般要编译链接第三方库时配置include目录
例如

INCLUDEPATH += ./boost/include\
               src/thirdpart/include

INCLUDEPATH += D:/boost/include\
               E:/cocos2dx/include
  • 可以用绝对或相对路径
  • 相对路径中./可以省略
  • 路径中不允许出现空格

链接库

对于静态库(.lib, .a)以及动态库.so

LIBS += -LD:/codetest/libcurlcpp/libcurl/lib/ -llibcurl\
        -LD:/codetest/libcurlcpp/libcurl/lib/ -lws2_32\
        -LD:/codetest/libcurlcpp/libcurl/lib/ -lwldap32\
        -LD:/codetest/libcurlcpp/libcurl/lib/ -lopencv\
        -LD:/codetest/libcurlcpp/libcurl/lib/ -lzmq

LIBS += D:/codetest/libcurlcpp/libcurl/lib/libcurl.lib\
        D:/codetest/libcurlcpp/libcurl/lib/ws2_32.lib\
        D:/codetest/libcurlcpp/libcurl/lib/wldap32.lib
        D:/codetest/libcurlcpp/libcurl/lib/opencv.a

再或者


LIBS += $$PWD/libcurl/lib/libcurl.lib\
        $$PWD/libcurl/lib/ws2_32.lib\
        $$PWD/libcurl/lib/wldap32.lib
  • 可以用-L指定目录,-l指定库的名称(无需后缀,.lib,.a, .so都适用)
  • 可以直接通过绝对路径和相对路径指定库的完整path(需后缀,.lib,.a, .so都适用),相对路径用$$pwd前缀,路径不允许空格
  • LIBS += somepath 这个可以多行写,也可以用“\”隔行
  • 最后一种只适用于windows静态库
  • 对于linux链接库, 比如opencv项目用make编译出的libopencv.a或者libopencv.so,链接的时候必须写 -lopencv ,写项目的名字而不是库的文件名字
  • 对于动态库dll,必须拷贝到exe执行目录或者在环境变量里配置路径

预编译宏

DEFINES += USE_OPENSSL\
           CURL_STATICLIB

类似于vs里面在工程里设置预编译选项

平台相关性处理

根据qmake所运行的平台来使用相应的作用域来进行处理

win32
{
    SOURCES += 1.cpp
}
else
{
    SOURCES += 2.cpp
}

根据平台进行条件编译

只适用于Windows编译的一些变量

DEF_FILE - 应用程序所要连接的.def文件。
RC_FILE - 应用程序的资源文件。
RES_FILE - 应用程序所要连接的资源文件。

源文件编码方式

CODECFORSRC = GBK

随手记

qt pro 里面变量的引用

  • VAR = foobar =>当运行qmake时,赋值给变量
  • $$VAR =>在运行qmake时,QMake变量的值
  • $${VAR} =>在运行qmake的时候QMake变量的值(相同但是被封闭以与周围文本分开)
  • $(VAR) =>运行Makefile(而不是qmake)时的环境变量的内容
  • $$(VAR) =>运行qmake(不是Makefile)时的环境变量的内容

参考资料

[1] Qt工程pro文件的简单配置(尤其是第三方头文件和库)
[2] QT工程pro文件变量说明
[3] QT的pro文件编写,高效简洁,,路径设置 有空格 引入系统环境变量等
[4] QT中PRO文件写法的详细介绍,很有用,很重要!
[5] QT中PRO文件写法的详细介绍

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

【整理】QT .pro文件中的变量说明 的相关文章

  • 有没有办法向 QListView 添加部分?

    我正在使用 Qt5 2 和 C 来实现一个应用程序 需要显示一个列表 其中包含类似于下面的示例图像的部分 source ngo hung com http www ngo hung com files images contact list
  • 在 Qt 服务器上验证用户身份

    我正在尝试使用 C QtTcpSocket 为个人项目 多人国际象棋游戏 实现身份验证系统 我的朋友建议了一种验证用户的方法 但我想问是否有更简单或更好的方法 来自 Python 背景 做这个项目主要是为了加深对 C 的理解 我将发布我朋友
  • 在 QtCreator 中使用 .pro 和 .pri 正确(树)显示 Qt 项目

    是否可以使用项目包含文件 pri 显示不止一个额外级别 例如如果 pro文件包括 pri文件包含两个 pri files pro pri pri pri 在 QtCreator 项目 中显示具有误导性 pro pri pri pri 它根本
  • 第一次信号发射后自动断开

    我正在从文件加载网页 然后替换其中的一些 html self template web page QtWebKit QWebPage self template web page mainFrame load QtCore QUrl tem
  • QT:删除QGridLayout中QLabel之间的空格

    我将一些具有不同颜色的 QLabels 添加到 QGridLayout 作为 QWidget 的布局 现在我在每个 Qlabel 与下一个 Qlabel 之间有一个间距 我想将其删除 我尝试将标签的边距设置为 0 将 GridLayout
  • 清除pyqt中布局中的所有小部件

    有没有办法清除 删除 布局中的所有小部件 self plot layout QtGui QGridLayout self plot layout setGeometry QtCore QRect 200 200 200 200 self r
  • QMainWindow 上的 Qt 布局

    我设计了一个QMainWindow with QtCreator s设计师 它由默认的中央小部件 aQWidget 其中包含一个QVBoxLayout以及其中的所有其他小部件 现在我想要的一切就是QVBoxLayout自动占据整个中央小部件
  • 如何声明一个带有成员函数指针的函数

    我有一个类 其中的成员变量指向库对象 class myClassA private libraryClass libraryObject 该库类发出事件 以字符串为特征 并提供一种机制 允许客户端类指定在发出事件时应调用的成员函数 因此在m
  • 使用 OpenGL 渲染 QImage

    与我相关的其他问题 https stackoverflow com questions 20126354 render qimage from sooffscreenrenderer in qglwidget 我认为更核心的问题是 如何渲染
  • Qt 5.1.1 与 Visual Studio 2012 - 这些 QT 版本无法访问

    打开 Visual Studio 时出现此错误 我安装自http qt project org downloads http qt project org downloads 适用于 Windows 64 位的 Qt 5 1 1 VS 20
  • PyQt4 信号和槽

    我正在使用 PyQt4 编写我的第一个 Python 应用程序 我有一个 MainWindow 和一个 Dialog 类 它是 MainWindow 类的一部分 self loginDialog LoginDialog 我使用插槽和信号 这
  • 无法运行 Qt 应用程序:找不到版本“Qt_5”

    我运行 Ubuntu 16 04 LTS 我的问题是我无法运行可以编译的 Qt5 应用程序 这是我尝试运行它时得到的结果 home user Desktop sconfig dist Release GNU Linux SCongif us
  • QML 列表视图拖放

    我想创建两个 qml 列表视图 可以执行两个功能 拖放一个列表中的项目以更改项目的顺序 跨列表拖放项目 项目将从一个列表中删除并添加到另一个列表中 根据 Qt 文档中的拖放示例 我决定创建两个访问同一列表模型的列表视图 列表模型中的每个项目
  • 使 QLabel 的像素图透明

    我有一个带有 QLabel 和像素图的主窗口 我想让它透明 或不那么不透明 我正在使用下面的代码 ui gt label gt setAttribute Qt WA TranslucentBackground ui gt label gt
  • 使用 QGraphicsScene 和 QGraphicsView 在 Qt 中开始基于 Tile 的游戏

    我将开始在 Qt 中编写基于 2D 图块的游戏 并阅读 QGraphicsScene 和 QGraphicsView 类 这些类旨在显示和处理大量 2D 对象 我的问题是 使用 QGraphicsScene 创建一个包含大量图块的世界是否可
  • Qt 相当于 .NET 数据绑定吗?

    Qt 中是否有相当于 NET 数据绑定的功能 我想使用引用数据库中特定实体的 QString 填充一些组合框和其他小部件 但是 如果我可以将数据绑定到这些字符串 而不是基于新的组合框选择再次查询数据库 或者基于构建我自己的将使用 QStri
  • 使用 qbs 构建 qt 应用程序

    我想知道在 Linux 上使用 qbs 编译 构建和创建 Android Qt 应用程序的步骤 我拥有所有必要的工具 目前我可以使用 qmake 创建 apk Qbs 目前不支持构建 Qt Android 应用程序 Qbs v1 4 中引入
  • QML MouseArea 将事件传播到按钮

    我正在开发一个应用程序 其菜单类似于 Android 版 Gmail 收件箱应用程序菜单 基本上 当您按下按钮打开菜单时 它就会滑入视图 用户可以将其滑开或按菜单上的按钮 对于滑动我使用了代码SwipeArea from kovrov ht
  • 一个具有完全透明背景的qt小部件

    我需要创建一个 qt 小部件 它将充当其他一些小部件的父级 并对它们进行排序 现在的问题是如何使其背景完全透明 我想这样做 struct Imp Imp QWidget parent thisWidget new QWidget paren
  • Qt - ubuntu中的串口名称

    我在 Ubuntu 上查找串行端口名称时遇到问题 如您所知 为了在 Windows 上读取串口 我们可以使用以下代码 serial gt setPortName com3 但是当我在 Ubuntu 上编译这段代码时 我无法使用这段代码 se

随机推荐

  • DNS over HTTPS来阻止DNS污染

    DNS 域名系统 的主要功能是将域名解析成IP地址 域名的解析工作由DNS服务器完成 从安全角度来看 域名解析的请求传输时通常不进行任何加密 这导致第三方能够很容易拦截用户的DNS 将用户的请求跳转到另一个地址 常见的攻击方法有DNS劫持和
  • 9.多重循环结构和程序调试

    2022 9 3 记录学习java的第九天 今天主要学习了多种循环的嵌套使用和程序调试 1 多重循环 使用方法 1 相同循环可以互相嵌套使用 2 各循环之间可以互相嵌套使用 3 外循环变量改变一次 内循环变量要从头到尾变化一遍 即 内循环是
  • 单链表算法实现, 查找, 删除, 销毁

    从链表的指定位置读取参数 从链表中查找第i个元素 用e来保存查找元素的数据 指定位置读取参数 list 头节点 i 要读取的位置 e 保存读取的元素 bool Link GetElem LinkList list int i int e i
  • 数组的indexOf 方法

    1 数组的indexOf 方法 String 类型的使用 let str orange str indexOf o 0 字符串中出现字母 o 的位置 str indexOf n 3 字符串中出现字母 n 的位置 str indexOf c
  • vue封装公共组件库并发布到npm库详细教程

    vue组件封装的原理 利用vue框架提供的api Vue use plugin 我们需要把封装好组件的项目打包成vue库 并提供install方法 然后发布到npm中 Vue use plugin 的时候会自动执行插件中的install方法
  • STM32CubeMX驱动ADS1118模块

    文章目录 1 前言 2 ADS1118模块简介 3 移植源码到工程 4 驱动源码中函数介绍 4 1 us延时函数 4 2 写入和读取ADS1118配置寄存器 4 3 初始化ADS1118 4 4 测量电压函数 5 实验 5 1 单通道采样
  • 2022年软件测试面试题大全【含答案】

    一 面试基础题 简述测试流程 1 阅读相关技术文档 如产品PRD UI设计 产品流程图等 2 参加需求评审会议 3 根据最终确定的需求文档编写测试计划 4 编写测试用例 等价类划分法 边界值分析法等 5 用例评审 主要参与人员 开发 测试
  • mysql drivermanager_jdbc详解:2、DriverManager管理多个数据库驱动

    先上代码 static String driverName com mysql jdbc Driver static String url jdbc mysql 127 0 0 1 3306 mysql static String user
  • react+ts+vite

    项目结构初始 1 使用vite构建项目 2 script常见用法 host 显示地址 port 端口号 设置端口号 open 编译后自动打开 3 配置 路径 项目路径别名的配置 ts对 指向src的目录提示是不支持的 所以需要手动配置 符号
  • Anaconda 打开时卡在Initializing(打不开)

    找到的一种说法是anaconda有个广告载入功能 这个功能需要联网 但国内网络环境有时候连不上目标网络 所以打开anaconda navigator的时候会因为网络问题一直卡在Initializing 解决的方法 方法一 把网络断开 没有了
  • 进入虚拟机 networkManager is not running 问题

    运行 systemctl restart NetworkManager命令 重启网络管理
  • java--基础--23--接口组成更新

    java 基础 23 接口组成更新 代码 https gitee com DanShenGuiZu learnDemo tree mysql mybaties DB jdk8 learn 1 接口组成更新 常量 public static
  • 每日学术速递5.3

    CV 计算机视觉 ML 机器学习 RL 强化学习 NLP 自然语言处理 Subjects cs CV 1 Learning Locally Editable Virtual Humans 标题 学习本地可编辑虚拟人 作者 Hsuan I H
  • 详解Seaborn,看这一篇就够了

    转载 Seaborn常见绘图总结 Seaborn是一个比Matplotlib集成度更高的绘图库 在科研和数据分析中我们常常看到一些画的非常高大上的图 这往往就是Seaborn绘制的图形 因此我们就使用短短的半天时间来学习一下Seaborn的
  • lsun数据集下载、转换、使用

    最近复现SAGAN用到了lsun数据集 1 下载地址 http dl yf io lsun scenes 我下载了church outdoor train lmdb zip 中间还安装了lmdb库 2 转换 一般下载的data py 转换代
  • Git 常用命令 --- git push命令

    git push的一般形式为 git push lt 远程主机名 gt lt 本地分支名 gt lt 远程分支名 gt 例如 git push origin master refs for master 即是将本地的master分支推送到远
  • IMP-00003: 遇到 ORACLE 错误 959 ORA-00959: 表空间 '' 不存在

    描述 在使用imp命令将dmp文件导入oracle中时 遇到如下错误 IMP 00003 遇到 ORACLE 错误 959 ORA 00959 表空间 TBS CDUSER 不存在 IMP命令如下 IMP cduser cduser123
  • Java Stream流详解

    本文目录 学习目标 中间操作 Filter 过滤 Map 转换 Sorted 排序 Distinct 去重 Limit 限制 Skip 跳过 Peek 展示 终止操作 forEach 循环 Collect 收集 Count 计数 Reduc
  • 软件测试基础理论知识—用例篇

    什么是测试用例 测试用例 Test Case 是为了实施测试而向被测试的系统提供的一组集合 这组集合包含 测试环境 操作步骤 测试数据 预期结果等要素 需求的概念 满足用户期望或正式规定文档 合同 标准 规范 所具有的条件和权能 包含用户需
  • 【整理】QT .pro文件中的变量说明

    注释 以 开始的行 直到结束 模板变量 告诉qmake生成哪种makefile TEMPLATE app 其中 app 表示该工程建立一个应用程序的makefile 这是默认值 所以如果模板没有被指定 这个将被使用 lib 表示该工程建立一