Qt 编译方式之 qmake[通俗易懂]

Qt 编译方式之 qmake[通俗易懂]作者:billy版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处QMake简介Qt的帮助文档中对于qmake是这样介绍的:qmake工具有助于简化不同平台上开发项目的构建过程。它自动生成生成makefile,因此创建每个makefile只需要几行信息。您可以将qmake用于任何软件项目,无论它是否使用qt编写。qmake是Qt工具包中带的一个非常…

大家好,又见面了,我是你们的朋友全栈君。

作者:billy
版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处

QMake简介

Qt 的帮助文档中对于 qmake 是这样介绍的:
在这里插入图片描述
qmake工具有助于简化不同平台上开发项目的构建过程。它自动生成生成makefile,因此创建每个makefile只需要几行信息。您可以将qmake用于任何软件项目,无论它是否使用qt编写。

qmake 是 Qt 工具包中带的一个非常方便的工具。可以用于生成 Makefile 以及各种工程文件,还可以生成 Microsoft Visual Studio 可以使用的项目文件等。 最关键的是它可以自动解决依赖关系,不用手写 Makefile,而且是跨平台的

qmake 语言

1. 注释

qmake中的注释和代码中不同,是以符号 ‘#’ 开头。
# 这是一个注释

2. QT

指定项目使用的qt模块,在C++实现级别,使用QT模块使其头文件可用于包含,并使其与二进制连接。默认情况下,qt包含core和gui,确保无需进一步配置即可构建标准的gui应用程序。如果想要构建一个没有 qt-gui 模块的项目,需要使用 “-=” 操作符排除gui。
QT -= gui # 去除 gui 模块,只使用 core 模块
QT += core gui widgets qml network # 使用了 core gui widgets qml network 这些模块

3. TARGET

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

TEMPLATE = app
TARGET = myapp
SOURCES = main.cpp

此项目运行之后会生成一个可执行文件,Windows下为myapp.exe,Linux下为myapp。

4. TEMPLATE

模板变量告诉qmake为这个应用程序生成哪种makefile,有以下选项可供选择:

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

5. 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这个选项,没有影响。默认情况下,支持是禁用的

6. DEFINES

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

在pro文件中添加:
DEFINES += MY_DEFINETION

在代码中使用:
#ifdef MY_DEFINETION
    // do something
#else
    // do something
#endif

7. DEF_FILE

指定要包含在项目中的.def文件
注意:此变量仅在使用应用程序模板时在Windows上使用。

8. DEPENDPATH

指定要查找以解析依赖项的所有目录的列表

9. DESTDIR

指定目标文件的放置位置
例如:DESTDIR = ../../lib

10. DISTFILES

指定要包含在dist目标中的文件列表。此功能仅受unixmake规范支持。
例如:DISTFILES += ../program.txt

11. DLLDESTDIR

指定复制目标dll的位置
注意:此变量仅适用于Windows目标。

12. EXTRA_TRANSLATIONS

指定包含将用户界面文本转换为非本机语言的转换(.ts)文件列表
与翻译不同,额外翻译中的翻译文件只能由lrelease处理,而不是lupdate。
你可以使用 CONFIG += lrelease 在构建期间自动编译文件,并且 CONFIG += lrelease embed_translations 以使它们在qt资源系统中可用。

13. FORMS

指定在编译之前由UIC处理的UI文件
构建这些UI文件所需的所有依赖项、头文件和源文件都将自动添加到项目中。
例如:

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

14. GUID

指定在.vcproj文件中设置的GUID
guid通常是随机确定的。但是,如果您需要一个固定的guid,可以使用这个变量来设置它。 此变量仅特定于.vcproj文件;否则将忽略它。

15. HEADERS

定义项目的头文件
qmake自动检测头文件中的类是否需要MOC,并将适当的依赖项和文件添加到项目中,以生成和链接MOC文件。
例如:

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

16. ICON

此变量仅在Mac OS上用于设置应用程序图标。有关详细信息,请参阅应用程序图标文档。

17. INCLUDEPATH

指定编译项目时应搜索的包含目录
例如:INCLUDEPATH = c:/msdev/include d:/stl/include

如果是不同系统的路径,可以添加系统判断

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

18. INSTALLS

指定执行make install或类似安装过程时将安装的资源列表。列表中的每一项通常都用提供安装位置信息的属性定义。

例如,下面的target.path定义描述了安装生成目标的位置,而installs分配将生成目标添加到要安装的现有资源列表中:

target.path += $$[QT_INSTALL_PLUGINS]/imageformats
INSTALLS += target

19. LIBS

指定要链接到项目中的库列表
如果使用unix-l(library)和-l(library path)标志,qmake将在Windows上正确处理库(即将库的完整路径传递给链接器)。库必须存在,qmake才能找到-l lib所在的目录。
例如:

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

20. MOC_DIR

指定放置所有中间MOC文件的目录
例如:

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

21. OBJECTS_DIR

指定放置所有中间对象的目录
例如:

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

22. PWD

指定指向包含要分析的当前文件的目录的完整路径
这对于在编写项目文件以支持阴影生成时引用源树中的文件非常有用。
注意:不要试图覆盖这个变量的值。

23. QM_FILES_INSTALL_PATH

指定资源系统中的目录,其中.qm文件将由 CONFIG += embed_translations 提供。
默认值为:/i18n/。

24. QMAKE

指定qmake程序本身的名称,并将其放置在生成的makefiles中
此变量的值通常由qmake或qmake.conf处理,很少需要修改。

25. QTPLUGIN

指定要与应用程序链接的静态qt插件的名称列表,以便它们作为内置资源可用
qmake自动添加所用qt模块通常需要的插件。
当链接到Qt的共享/动态构建或链接库时,此变量当前不起作用。它可以在以后用于动态插件的部署。

26. RC_FILE

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

27. RC_ICONS

指定应包含在生成的.rc文件中的图标
仅限Windows。仅当未设置rc_file和res_file变量时才使用此选项。

28. RCC_DIR

指定qt资源编译器输出文件的目录

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

29. REQUIRES

指定作为条件计算的值列表
如果任何条件都是错误的,那么在构建时qmake将跳过此项目(及其子项目)。
注意:如果希望在生成时跳过项目或子项目,建议使用requires()函数

30. RESOURCES

指定目标的资源收集文件(qrc)的名称

31. SOURCES

指定项目中所有源文件的名称

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/144666.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • 信息服务器怎么恢复,服务器数据恢复怎么弄[通俗易懂]

    信息服务器怎么恢复,服务器数据恢复怎么弄[通俗易懂]原标题:服务器数据恢复怎么弄服务器数据恢复怎么弄?说到服务器数据恢复,很多外行人或许不太明白。所谓的服务器数据恢复,首先需要拆分解释一下。何为服务器数据?小编给各位的解释就是:位于服务器存储介质上的信息就可以统称为服务器数据。那么,什么样的情况下需要服务器数据恢复呢?服务器数据恢复的前提是服务器的数据有损坏。何为数据损坏?数据信息发生意料之外的变化即为损坏或数据破坏!因此如果服务器损坏了大家也不要…

  • 三层架构(我了解并详细分析)

    三层架构(我了解并详细分析)

    2021年12月31日
  • 亚马逊服务器购买_电商平台用什么服务器

    亚马逊服务器购买_电商平台用什么服务器Siteground主机空间怎么样?很多国内的小伙伴可能对siteground主机空间比较陌生,感觉不如bluehost或者Godaddy名气大,实际上siteground在国外是一家非常有名气和实力的美国主机服务商,也是wordpress、Drupal、Jommla这三家知名建站程序一致推荐的主机商。我们蓝鲨网络使用siteground也好多年,最近几年也有非常多的客户选购了他家的主机,这几年使用下来最明显的感觉就是稳定、速度快、客服解决问题的技术水平都比较高。siteground套餐配置区别首先

  • linux 卸载deb安装的包

    linux 卸载deb安装的包sudodpkg-l找到程序名字sudoapt-getautoremove程序名字

  • 基于java的贪吃蛇游戏的设计与实现(贪吃蛇安卓游戏源码)

    一.前言某日,看见隔壁家的小朋友在玩一款网络爆款贪吃蛇游戏,感觉很好玩。自己刚好正在学习JAVA编程,也想实现一个类似功能的游戏Demo练手,在网上查看了不少源码案例,全都是很古老的方块式贪吃蛇游戏案例,没有想要的实现,因此自己动手实现一个JAVA版的贪吃蛇游戏。我在这个Dome完成之后重写了这个游戏的Android版,并重新更名为《蛇王传说》。也欢迎大家下载试玩。游戏下载地址:https…

  • java 输出_java怎么输出

    java 输出_java怎么输出展开全部java控制台输出由print()和println()来完成最为简单。这两种方法由rintStream(System.out引用32313133353236313431303231363533e78988e69d8331333365643661的对象类型)定义。尽管System.out是一个字节流,用它作为简单程序的输出是可行的。因为PrintStream是从OutputStrea…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号