qmake常用语法

2023-11-16



qmake常用语法
一、注释:

  用“#”注释,表示到行尾均为注释。

二、include:

  包含别的文件,例如:include xx.pri。类似于c++的#include。。。

三、平台宏:

  win32/macx/unix/linux-g++等,分别对应于windows、mac、unix、linux等系统。

四、作用域:

  作用域和“if”语句很像,如果某个条件为真,作用域中的设置就会被处理,例如:

  debug{

    TARGET = XXd

  }

  release{

    TARGET = XX

  }

  上面代码的意思是:如果是debug版本,可执行程序的名字是xxd,否则就是xx。可以这样写:

  debug:TARGET = xxd

  release:TARGET = XX

  作用域也可以嵌套使用,例如:

  win32{

    debug{

      TARGET = xxwd

    }

  }

  也可以这样写:

  win32:debug{

    TARGET = xxwd

  }

  还可以加上else语句:

  debug{

    TARGET = xxd

  }else{

    TARGET = xx

  }

 五、Qt+=: 添加额外的模块支持,例如Qt -= QtCore;Qt += network,phonon,xml,thread

二,关键字:操作符

1、“=”操作符:

  分配一个值给一个变量。例如:TARGET = myapp,这将会删掉原来对TARGET的任何设置,并将变量TARGET的值设置为myapp。

2、“+=”操作符:

  向一个变量的值的列表中添加一个值。例如:DEFINES += QT_DLL,把QT_DLL添加到makefile的预处理定义的列表中。

3、“-=”操作符:

  从变量的列表中移除一个值。例如:DEFINES -= QT_DLL,把QT_DLL从Makefile的预处理定义列表中移除。

4、“*=”操作符:

  仅仅在一个值不存在于一个变量的值的列表中的时候,把它添加进去。例如:DEFINES *= QT_DLL,只用在QT_DLL没有被定义在预处理定义的列表中时,它才会被添加进去。

5、“~=”操作符:

  将会替换任何与指定的值的正则表达式匹配的任何值。例如:DEFINES ~= s/QT_[DT].+/QT,将会用QT来替代任何以QT_D或QT_T开头的变量中的QT_D或QT_T。


三,关键字:常用变量

一、TEMPLATE变量:

  生成Makefile采用的模板。以下是可供选择的模板:

  app:建立一个应用程序Makefile,这个也是默认值,没有指定模板是默认是这个。

  lib:建立一个库的Makefile。

  vcapp:建立一个应用程序的visual studio项目文件。

  vclib:建立一个库的visual studio项目文件。

  subdirs:创建一个能够进入子目录并且为之生成为它调用make的Makefile。需要在后面用SUBDIRS=XX来指定那些子目录。

1、app模板:

  app模板告诉qmake为建立一个应用程序生成一个Makefile。当使用这个模板时,下面这些qmake系统变量是被承认的。你应该在你的.pro文件中使用它们来为你的应用程序指定特定信息。

  HEADERS:需要包含的头文件的列表。

  SOURCES:需要的源文件的列表。

  FORMS:需要的.ui文件的列表。

  LEXSOURCES:所有lex源文件的列表。

  YACCSOURCES:所有yacc源文件的列表。

  TARGET:可执行应用程序的名称。默认值为项目文件的名字。

  DESTDIR:放置可执行程序目标的目录。

  OBJECTS_DIR:放置obj中间文件的目录。

  MOC_DIR: moc转换文件路径。

  RCC_DIR: 资源文件路径。

  UI_DIR:ui文件转换的路径。

  RESOURCES:需要包含的资源文件。

  LIBS:依赖库的路径和名称 -L{xxdirxx} -l{xxnamexx}。

  LIBEXT: 产生lib的后缀。

  DEFINES:应用程序所需的额外的宏定义列表。

  INCLUDEPATH:应用程序所需的额外的包含路径列表。

  DEPENDPATH:应用程序所依赖的搜索路径。

  VPATH:寻找补充文件的搜索路径。

  DEF_FILE:只有Windows需要:应用程序所要连接的.def文件。

  RC_FILE:只有Windows需要:应用程序的资源文件。

  RES_FILE:只有Windows需要:应用程序所要连接的资源文件。

  TRANSLATIONS: 多国语言支持文件。

  INSTALLS: 要安装的文件。

  target.path: 安装的路径。

  详细请参考Qt帮助条目:qmake Variable Reference。

2、lib模板:

  lib模板告诉qmake为建立一个库而生成makefile。当使用这个模板时,除了“app”模板中提到系统变量,还有一个VERSION是被支持的。你需要在为库指定特定信息的.pro文件中使用它们。

  VERSION:目标库的版本号,例如:1.2.3。

3、subdirs模板:

  subdirs模板告诉qmake生成一个makefile,它可以进入到特定子目录并为这个目录中的项目文件生成makefile并且为它调用make。这个模板只有一个系统变量SUBDIRS可以被识别。

  SUBDIRS:这个变量中包含了所要处理的含有项目文件的子目录的列表。这个项目文件的名称是和子目录同名的,这样qmake就可以发现它。例如,如果子目里是“subapp”,那么在这个目录中的项目文件应该被叫做subapp.pro。

 

二、CONFIG变量:

  配置变量,指定了编译器所要使用的选项和所需要链接的库。

1、控制编译器标志的选项:

  release:应用程序将以release模式连编,如果“debug”被指定,它将被忽略。

  debug:应用程序将以debug模式连编。

  warn_on:编译器会输出尽可能多的警告信息,如果“warn_off”被指定,它将被忽略。

  warn_off:编译器会输出尽可能少的警告信息。

2、控制需要连接的库的选项:

  qt:应用程序是一个Qt应用程序,并且Qt库将会被链接。

  thread:应用程序是一个多线程程序。

  x11:应用程序是一个x11应用程序或者库。

  windows:只用于app模板,应用程序是一个windows下的窗口应用程序。

  console:只用于app模板,应用程序是一个windows下的控制台应用程序。

  dll:只用于lib模板,库是一个共享库。

  staticlib:只用于lib模板,库是一个静态库。

  plugin:只用于lib模板,库是一个插件,这将会使dll选项生效。

  例如:CONFIG += qt debug,使用qt库的应用程序,debug版本。

3、注意事项:必须使用“+=”,不要使用“=”,否则原来的设置会被清除。

 

三、变量用法:

1、自定义变量:

  MY_VARIABLE = value

  定义了一个变量MY_VARIABLE,并将值设置为value。

2、变量值的传递:

  可以通过在其它任何一个变量的变量名前加$$来把这个变量的值分配给当前的变量。例如:

  MY_DEFINES = $$DEFINES  

  现在MY_DEFINES变量包含了项目文件在这点时DEFINES变量的值。这也和下面的语句一样:

  MY_DEFINES = $${DEFINES}


四,关键字:常用函数

这里列出的不全,最好还是看Qt的帮助主题:qmake Function Reference

1、contains( variablename, value ):
  如果value存在于一个被叫做variablename的变量的值的列表中,那么成功,否则失败。例如:

  contains( CONFIG, thread ) {
    DEFINES += QT_THREAD_SUPPORT
  }

  如果thread存在于CONFIG变量的值的列表中时,那么QT_THREAD_SUPPORT将会被加入到DEFINES变量的值的列表中。

2、count( variablename, number ):
  如果number与一个被叫做variablename的变量的值的数量一致,那么成功,否则失败。例如:

  count( DEFINES, 5 ) {
    CONFIG += debug
  }

3、dirname(file):

  返回指定文件的目录名称。例如:

   FILE = /etc/X11R6/XF86Config

   DIRNAME = $$dirname(FILE) #/etc/X11R6

4、error( string ):

  这个函数输出所给定的字符串,然后会使qmake退出。例如:

  error(An error has occurred in the configuration process.)

5、exists( filename ):

  如果指定文件存在,那么函数成功,否则失败。例如:

  exists( /local/qt/qmake/main.cpp ) {
    SOURCES += main.cpp
  }

  如果/local/qt/qmake/main.cpp存在,那么main.cpp将会被添加到源文件列表中。

  注意可以不用考虑平台使用“/”作为目录的分隔符。

6、find( variablename, substr ):

  这将会放置variablename中所有匹配substr的值。substr也可以是正则表达式,而因此将被匹配。

  MY_VAR = one two three four
  MY_VAR2 = $$join(MY_VAR, " -L", -L) -Lfive
  MY_VAR3 = $$member(MY_VAR, 2) $$find(MY_VAR, t.*)

  MY_VAR2将会包含“-Lone -Ltwo -Lthree -Lfour -Lfive”,并且MYVAR3将会包含“three two three”。

7、include(filename):

  包含文件。

8、infile( filename, var, val ):

  如果filename文件(当它被qmake自己解析时)包含一个值为val的变量var,那么这个函数将会返回成功。你也可以不传递第三个参数(val),这时函数将只测试文件中是否分配有这样一个变量var。

9、isEmpty( variablename ):

  这和使用count( variablename, 0 )是一样的。如果叫做variablename的变量没有任何元素,函数返回成功否则失败。例如:

  isEmpty( CONFIG ) {
    CONFIG += qt warn_on debug
  }

10、join( variablename, glue, before, after ):

  这将会在variablename的各个值中间加入glue。如果这个变量的值为非空,那么就会在值的前面加一个前缀before和一个后缀after。只有variablename是必须的字段,其它默认情况下为空串。如果你需要在glue、before或者after中使用空格的话,你必须提供(引用?)它们。

11、member( variablename, position ):

  返回函数的值列表中指定位置的值。如果变量值列表并不存在指定的位置,这将会返回一个空串。variablename是唯一必须的字段,如果没有指定位置,则默认为列表中的第一个值(position默认为0)。

12、message( string ):

  这个函数只是简单地在控制台上输出消息。

      message( "This is a message" )

  文本“This is a message”被输出到控制台上并且对于项目文件的处理将会继续进行。

13、replace(string, old_string, new_string):

  用讲string中的old_string用new_string代替,例如:

  MESSAGE = This is a tent.

  message($$replace(MESSAGE, tent, test))

  prints the message:

  This is a test.

14、system( command ):

  特定指令被执行并且如果它返回一个1的退出值,那么函数成功否则失败。例如:

  system( ls /bin ) {
    SOURCES += bin/main.cpp
    HEADERS += bin/main.h
  }

  所以如果命令ls /bin返回1,那么bin/main.cpp将被添加到源文件列表中并且bin/main.h将被添加到头文件列表中。

15、warning(string):

  这个函数一直返回成功,并且会输出指定字符串给用户,跟message是同义词。





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

qmake常用语法 的相关文章

  • 如何使用meta-toolchain-qt5构建Qt(带有QtWebEngine支持)?

    我正在尝试使用构建 Qtmeta toolchain qt5 但是当我通过这样做时poky glibc x86 64 meta toolchain qt5 cortexa7hf vfp vfpv4 neon toolchain 2 0 1
  • 如何在 QtQuick 2 中对 QML TableView 进行排序?

    我想使用 Qt 5 1 实现具有自定义角色的可排序 TableView 但我不知道当用户单击标题时该怎么做才能对其进行排序 在我的 Qt pro 文件中 我添加了 android ios blackberry qtHaveModule wi
  • QSerialPort 中的 readAll() 不包括最后发送的响应

    我正在使用 Qt 来控制串行设备 如果我向串行设备发送命令 我会执行类似的操作serial gt write command r n 我制作了一个按钮 它将纯文本小部件内的文本更改为串行端口的响应 为了获得串口的响应 我使用serial g
  • Qt-Qlist 检查包含自定义类

    有没有办法覆盖加载自定义类的 Qt QList 的比较机制 即在 java 中你只需要重写一个比较方法 我有一个带有我的自定义类模型的 QList QList
  • 在高 dpi Windows 平台上自动重新缩放应用程序?

    我正在编写一个需要在高 dpi Windows 192dpi 而不是 96dpi 上运行的 Qt 应用程序 不幸的是 Qt 框架尚不支持高 dpi 至少在 Windows 上 因此我的应用程序及其所有元素看起来只有应有尺寸的一半 有没有办法
  • 如何为 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 安装程序框架 - 如何在卸载时仅删除某些文件和文件夹

    我使用 Qt 安装程序框架 如何确保在卸载时仅删除某些文件或文件夹 而不是像当前那样删除安装文件夹中的所有文件 先感谢您 您可以覆盖默认行为component createOperations对于卸载程序 然后使用手动指定每个卸载路径com
  • 如何消除 QTableWidget 中的空白?

    How do I get rid of the whitespace in my application 我想摆脱 QTableWidget 中的空白 蓝色箭头 我该怎么做 这是我的应用程序的代码 gridLayout QGridLayou
  • 选择合适的IDE

    您会推荐使用以下哪种 IDE 语言来在 Windows 下开发涉及识别手势并与操作系统交互的项目 我将使用 OpenCV 库来执行图像处理任务 之后 我将使用 win32 API 或 NET 框架与操作系统交互 具体取决于您建议的工具 性能
  • Qt 创建者 4.8.4。 Windows 7 - 64 位安装

    我在 QT 方面遇到了一些困难 我需要在学校使用它来完成一些 GUI 应用程序 我最近完成了以下步骤 1 mingw get inst 20120426 exefrom 来源锻造 http sourceforge net projects
  • 如何将flex和bison与Qt项目集成?

    我正在 git 源代码控制下使用 Qt4 制作 GUI 程序 Github页面 https github com vinayak garg dic sim 项目的一小部分需要扫描和解析 所以我想在项目中使用flex和bison 我能想到3种
  • 从 Qt 更改屏幕分辨率?

    我想更改屏幕分辨率 然后使用一个 ActiveX 控件 Flash 播放器 进入全屏 显然 仅适用于 Windows 的解决方案就可以了 有 Qt api 吗 还是我需要深入研究 winapi 如果是这样 我该在哪里查找 关键字 谢谢您的帮
  • QMessageBox::about 可以根据标题长度调整大小吗?

    我想创建一个简单的 关于 对话框 但注意到QMessageBox about不会根据标题的长度调整其大小 由于字体较大 标题通常会更长 至少在我的桌面环境中 仅根据内容调整其大小 有没有办法确保对话框足够大以显示所有标题 我当然可以向 ab
  • 在 Windows 上从源代码构建 PhantomJS-2

    我正在尝试基于这些在 Windows 8 1 x64 上从源代码构建 PhantomJS 2 的开发版本指示 https github com ariya phantomjs wiki PhantomJS 2 但是我收到以下错误 mingw
  • 如何重写(重新实现)QFileSystemModel 中的成员函数

    我已经为此苦苦挣扎了一段时间 Qt s QFileSystemModel由于图标获取算法非常糟糕 在获取数百个文件时速度非常慢 我想完全禁用图标 它们被提取到QFileSystemModel data方法不是虚拟的 QFileSystemM
  • 无法将 [未定义] 分配给 QColor

    我正在使用 Qt 5 11 构建 运行代码 代码中有QML风格如下 Button style delegate Component id enabledButtonStyle ButtonStyle padding top 0 paddin
  • C++ QT libXL 错误:“启动期间程序退出,代码为 0xc0000135”

    我正在尝试编写一个使用 libXL 的 QT 应用程序 但是当我尝试编译时 我收到一个弹出框 显示 During Startup program exited with code 0xc0000135 我已经准确地找出了哪一行导致了问题 它
  • 为什么anchors.centerIn不适用于Column元素?

    我有这段 QML 代码 Column spacing units gu 2 anchors fill parent centerIn parent Row spacing units gu 4 Row spacing units gu 4
  • 在另一个中使用 QAbstractListModel

    我在尝试使用 Qt QML 为我的应用程序开发数据模型时遇到问题 我已经用过一个QAbstractListModel能够将海关数据模型从 C 传递到 QML 并且它对于简单模型 例如基于字符串和布尔的模型 来说就像一个魅力 但现在我需要建立
  • Qt - QProcess 不工作

    我尝试启动 Internet Explorer 所以我使用下面的代码 QProcess process new QProcess this QString temp C Program Files Internet Explorer iex

随机推荐

  • Log4net等级说明以及按照不同级别写入多个日志文件

    等级说明 Level级别 DEBUG
  • canvas制作在线画板

    上效果图
  • ubuntu中使用Deb安装VS Code

    01 进入VS Code 下载安装包 网址 https code visualstudio com 02 将Windows系统中下载的deb安装包复制到虚拟机ubuntu中 03 进入虚拟机ubuntu中 通过cd命令进入到deb安装包目录
  • 点云配准注意的地方

    1 法向量是局部坐标系的概念 因此要将点云中心移到原点 再计算法向量 类似于先平移再旋转 而不是先旋转再平移 2 用kdtree时 用近邻点个数 而不是距离 因为点云各个不同 3 变换矩阵的对角线是目标与源点云的相似度 位移为0 x det
  • Unity小地图制作

    Unity小地图制作 方法一 简易版 如果角色有跳跃功能不建议使用 原理 利用一个新的摄像机来制作小地图 步骤 1 先搭建一个简单场景 2 在层级列表先创建一个摄像机 移出其中的Audio Listener组件 一个场景中只能有一个Audi
  • 题目 1054: 二级C语言-计算素数和

    输入两个正整数m和n m
  • 锁消除和锁粗化

    一 锁消除 JIT 及时编译器 对锁的优化 因为正常都是多个线程去竞争同一把锁 但是当前代码中每调用一次m1方法就会创建一个新的对象 也可以理解为每个线程对应了一把新的锁 没有竞争的情况 毫无意义 所以叫锁消除 锁消除 public cla
  • C语言实现数据高低位翻转

    通过指针转换为字节类型 直接交换 include
  • 73. Set Matrix Zeroes

    Given a m x n matrix if an element is 0 set its entire row and column to 0 Do it in place 这题有很多方法 一开始想的是用O m n 的空间 用vect
  • 使用Freemarker 实现JSP页面的静态化

    使用Freemarker 静态化网页 一 原理 Freemarker 生成静态页面 首先需要使用自己定义的模板页面 这个模板页面可以是最最普通的html 也可以是嵌套freemarker中的 取值表达式 标签或者自定义标签等等 然后后台读取
  • 【网络】Wireshark分析RST消息

    文章目录 前言 1 定义 2 有三个条件可以产生RST 3 说明 4 RST数据报文产生情况 1 端口未打开 系列文章 Wireshark分析Netty建链过程 tcp三次握手 osi模型 IPV4数据报头部格式 Wireshark分析RS
  • 数据结构双向链表,实现增删改查

    一 双向链表的描述 在单链表中 查找直接后继结点的执行时间为O 1 而查找直接前驱的执行时间为O n 为克服单链表这种单向性的缺点 可以用双向链表 在双向链表的结点中有两个指针域 一个指向直接后继 另一个指向直接前驱 二 双向链表的存储结构
  • Base64 转 文件下载

    将base64字符串转化为文件 1 将下面代码另存为html文件 2 用浏览器打开 3 点击下载 代码如下 div 输入base64字符串 div
  • opensips之yyparse( )

    parse the config file prior to this only default values e g for debugging settings will be used yyin cfg stream if yypar
  • HTTPS协议详解

    文章目录 一 HTTPS是什么 二 HTTPS的工作过程 引入对称加密 引入非对称加密 引入证书 总结 三 HTTPS 与 HTTP 的区别 区别 HTTPS的优缺点 总结 一 HTTPS是什么 HTTPS HTTPS 也是一个应用层协议
  • stm32f10x 时钟系统详解/时钟树/时钟初始化/SystemInit函数全注解

    STM32F10x 时钟系统初学总结 一 时钟系统 1 概述 用通俗的话来说 时钟是单片机的 脉搏 是单片机的驱动源 使用单片机中的任何一个外设都必须打开此外设相应的时钟 这样的好处是 在不使用某个外设的时候 关闭此时钟外设 从而可以降低系
  • 合并两个有序链表(精美图示详解哦)

    全文目录 引言 合并两个有序链表 题目描述 方法一 将第二个链表合并到第一个 思路 实现 方法二 尾插到哨兵位的头节点 思路 实现 总结 引言 在前面两篇文章中 我们介绍了几道链表的习题 反转链表 链表的中间结点 链表的倒数第k个结点 戳我
  • 深度学习实战28-AIGC项目:自动生成定制化的PPT文件

    大家好 我是微学AI 今天给大家介绍一下深度学习实战28 AIGC项目 自动生成定制化的PPT文件 AIGC项目是一个基于自然语言处理技术的创新性项目 旨在利用ChatGPT模型生成定制化的PPT文件 该项目主要应用于商务和教育领域 可以帮
  • 中文NLP的第二步:分词转词表ID,基于 PaddleHub 实现(学习心得)

    上一步我们做了分词 中文NLP的第一步 分词 基于 PaddleHub 实现 绝对小白友好 学习心得 第二步是把分词结果 对照词表转化成 ID 词表是什么呢 首先我们要知道 中文字符是没办法直接计算的 更不要说进一步的操作了 所以我们需要的
  • qmake常用语法

    qmake常用语法 一 注释 用 注释 表示到行尾均为注释 二 include 包含别的文件 例如 include xx pri 类似于c 的 include 三 平台宏 win32 macx unix linux g 等 分别对应于win