当前位置: 首页 > news >正文

Qt扫盲-QMake 使用概述

QMake 使用概述

  • 一、概述
  • 二、简单开始
  • 三、使应用程序可调试
    • 1. 添加平台特定的源文件
    • 2. 如果文件不存在,停止qmake
    • 3. 检查多个条件

一、概述

本教程教你qmake的基础知识。qmake 其实就是一个自动化编译的流程控制文件,也是Qt程序的生成makefile的工具,qmake 其实就是来解析 Qt Pro文件的一个程序,基本上我们主要还是通过 编写 pro 工程文件,然后调用 qmake 命令来生成Makefile, 最后生成可执行文件的过程。qmake 其实就是和 cmake 一样的,生成一个Makefile 的工具。只是qmake 是qt 提供的一个跨平台 生成Makefile的软件,我一般也是用 qmake 多些,因为更简单些。

二、简单开始

让我们假设您刚刚完成了应用程序的基本实现,并创建了以下文件:

  • hello.cpp
  • hello.h
  • main.cpp

我们需要做的第一件事是添加告诉 qmake 作为开发项目一部分的源文件和头文件的行。

即是通过设置一些变量来完成的。

我们首先将源文件添加到项目文件中。为此,您需要使用 SOURCES 变量。只需用 SOURCES += 开始新一行,并在其后加上hello.cpp。你应该有这样的东西:

SOURCES += hello.cpp

我们可以对项目中的每个源文件重复这一步骤,直到得到如下结果:

SOURCES += hello.cpp
SOURCES += main.cpp

如果你更喜欢使用类似make的语法,你可以使用换行转义,就像这样:

SOURCES = hello.cpp \main.cpp

既然源文件已经在项目文件中列出,那么必须添加头文件。添加这些文件的方式与源文件完全相同,只是我们使用的变量名是 HEADERS

一旦你这样做了,你的项目文件应该看起来像这样:

HEADERS += hello.h
SOURCES += hello.cpp
SOURCES += main.cpp

生成的目标名称将自动设置。它与项目文件名相同,但具有适合于平台的后缀。例如,如果项目文件名为 hello.pro 在Windows上目标是hello.exe,在Unix上目标是hello。

如果你想使用不同的名称,你可以在项目文件中通过 TARGET 来设置这个可执行文件名叫 helloworld :

TARGET = helloworld

完成的项目文件应该是这样的:

HEADERS += hello.h
SOURCES += hello.cpp
SOURCES += main.cpp

下面生成这些的命令我们可以了解就行,基本上我们都是在GUI的Qt Creator IDE下开发,我们只需要点击 运行 按钮就能运行出结果啦。

现在可以使用qmake为应用程序生成Makefile。在命令行中,在项目目录中,键入以下命令:

qmake -o Makefile hello.pro

然后根据你使用的编译器输入make或nmake。

对于Visual Studio用户,qmake还可以生成Visual Studio项目文件。例如:

qmake -tp vc hello.pro

三、使应用程序可调试

应用程序的发布版本不包含任何调试符号或其他调试信息。在开发过程中,生成具有相关信息的应用程序的调试版本是很有用的。通过向项目文件中的 CONFIG 变量添加 debug ,可以轻松实现这一点。

例如:

CONFIG += debug
HEADERS += hello.h
SOURCES += hello.cpp
SOURCES += main.cpp

像以前一样使用qmake生成Makefile。现在,在调试环境中运行应用程序时,您将获得有关应用程序的有用信息。

1. 添加平台特定的源文件

经过几个小时的编码之后,您可能已经开始了应用程序中特定于平台的部分,并决定将依赖于平台的代码分开。

现在有两个新文件要包含到项目文件中:helloin .cpp和hellounix.cpp。我们不能仅仅将这些文件添加到SOURCES变量中,因为这会将两个文件都放在Makefile中。因此,我们在这里需要做的是使用一个作用域,它将根据我们为哪个平台构建而被处理。

为Windows添加平台相关文件的简单作用域如下所示:

win32 {SOURCES += hellowin.cpp
}

当构建Windows时,qmake将helloin .cpp添加到源文件列表中。在为其他平台构建时,qmake会忽略它。现在剩下要做的就是为特定于unix的文件创建一个作用域。
当你这样做了,你的项目文件应该看起来像这样:

CONFIG += debug
HEADERS += hello.h
SOURCES += hello.cpp
SOURCES += main.cpp# windows
win32 {SOURCES += hellowin.cpp
}# 类unix 包含 Linux
unix {SOURCES += hellounix.cpp
}

这个就是条件编译一样,也会像以前一样使用qmake生成Makefile。

2. 如果文件不存在,停止qmake

如果某个文件不存在,您可能不想创建Makefile。我们可以使用exists()函数来检查文件是否存在。我们可以使用error()函数停止qmake的处理。这与作用域的工作方式相同。只需将作用域条件替换为函数。一个名为main.cpp的文件的检查是这样的:

!exists( main.cpp ) {error( "No main.cpp file found" )
}

!符号用于否定测试。也就是说,如果文件存在,exists(main.cpp)为真,如果文件不存在,!exists(main.cpp)为真。

CONFIG += debug
HEADERS += hello.h
SOURCES += hello.cpp
SOURCES += main.cpp
win32 {SOURCES += hellowin.cpp
}
unix {SOURCES += hellounix.cpp
}
!exists( main.cpp ) {error( "No main.cpp file found" )
}

像之前一样使用qmake来生成makefile。如果暂时重命名main.cpp,将在编译输出区看到消息,qmake将停止处理。

3. 检查多个条件

假设你使用的是Windows,你希望在命令行中运行应用程序时能够通过qDebug()看到语句输出。要查看输出,您必须使用适当的控制台设置构建应用程序。在Windows上,我们可以轻松地将console放在配置行中,在Makefile中包含此设置。然而,假设我们只想在Windows上运行且debug已经在配置行中时添加配置行。这需要使用两个嵌套作用域。首先创建一个作用域,然后在其中创建另一个作用域。将需要处理的设置放在第二个作用域中,如下所示:

win32 {debug {CONFIG += console}}

嵌套的作用域可以用冒号连接在一起,因此最终的项目文件如下所示:

CONFIG += debug
HEADERS += hello.h
SOURCES += hello.cpp
SOURCES += main.cppwin32 {SOURCES += hellowin.cpp
}unix {SOURCES += hellounix.cpp
}!exists( main.cpp ) {error( "No main.cpp file found" )
}win32:debug {CONFIG += console
}
http://www.lryc.cn/news/6750.html

相关文章:

  • Spring Cloud之Zuul
  • 为什么要有分布式锁?
  • 【Redis】Redis持久化之RDB详解(Redis专栏启动)
  • Retinanet网络与focal loss损失
  • Spring事务的失效场景
  • 芯动联科在科创板IPO过会:拟募资10亿元,金晓冬为实际控制人
  • 数据结构之单链表
  • 儿子跟妈妈关系不好怎么办?这里有解决办法!
  • 论文投稿指南——中文核心期刊推荐(植物保护)
  • 华科万维C++章节练习4_6
  • 详解子网技术
  • chatGTP的全称Chat Generative Pre-trained Transformer
  • hive数据存储格式
  • mysql数据库备份与恢复
  • 《NFL橄榄球》:辛辛那提猛虎·橄榄1号位
  • 2、线程、块和网格
  • C++ 算法主题系列之贪心算法的贪心之术
  • 请注意,PDF正在传播恶意软件
  • 【Kubernetes】【二】环境搭建 环境初始化
  • Python:每日一题之发现环(DFS)
  • C++设计模式(14)——享元模式
  • SpringCloud之Eureka客户端服务启动报Cannot execute request on any known server解决
  • 从零开始搭建kubernetes集群环境(虚拟机/kubeadm方式)
  • 【零基础入门前端系列】—表格(五)
  • C#开发的OpenRA的只读字典IReadOnlyDictionary实现
  • mulesoft MCIA 破釜沉舟备考 2023.02.14.06
  • Python网络爬虫 学习笔记(1)requests库爬虫
  • Splay
  • 智能网联汽车ASIL安全等级如何划分
  • Stable Diffusion 1 - 初始跑通 文字生成图片