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

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

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

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

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • ubuntu查看cuda、cudnn等版本的命令

    1、查看ubuntu版本cat/proc/version结果:能看到linux内核版本号、gcc版本、ubuntu版本及安装时间。2、系统位数uname-a能看到linux内核版本号和系统是x86-64位的。3、cuda版本cat/usr/local/cuda/version.txt版本是10.0.1304、cudnn版本cat…

    2022年4月4日
    1.3K
  • H5文件读取_如何用电脑读取手机文件

    H5文件读取_如何用电脑读取手机文件H5文件读取:importtorch.utils.dataasdataimporttorchimporth5pyclassDatasetFromHdf5(data.Dataset):def__init__(self,file_path):super(DatasetFromHdf5,self).__init__()hf=h5py.File(file_path)self.data=hf.get(‘data’)

    2022年9月9日
    0
  • 干货!java文件上传判重姿势浅谈

    干货!java文件上传判重姿势浅谈一、场景:文件上传,用户极有可能上传重复文件,内容完全一致。如果对上传的文件未做任何处理,对于文件存储系统来说将是灾难,大量重复的数据,如果允许上传大文件,那么对于存储资源将是巨大的浪费。对于重复的文件,只需要复制相应的访问地址即可,源文件可无需上传,既减轻了网络带宽压力,也减少了存储容量的压力。二、应对:1、通过文件名判重。非特殊情况下,不会采用这种方案,理由跟人同名一样,文件名很容易重复,随着用户上升,概率会变大。采用此方案极易导致不能达到判重的目的。2、读取文件头加部分内容。这种方案可以解

    2022年5月15日
    28
  • pycham 2021激活码_通用破解码

    pycham 2021激活码_通用破解码,https://javaforall.net/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

    2022年3月16日
    131
  • google地图怎么下载离线地图_谷歌瓦片行列号算经纬度

    google地图怎么下载离线地图_谷歌瓦片行列号算经纬度谷歌地图离线地图瓦片下载Ifyou’veeverwantedtobeabletodownloadGoogleMapsdataforofflineuse,youshouldcheckoutgmapcatcher,across-platformapplicationthatcachesmapsegmentslocally.如果您曾经希望能够下载…

    2022年9月20日
    0
  • RPC接口设计_java rpc项目

    RPC接口设计_java rpc项目写在前边分布式架构是互联网应用的基础架构,很多新人入职以来就开始负责编写和调用阿里的各种远程接口。但如同结婚一般,用对一个正确的接口就如同嫁一个正确的人一样,往往难以那么顺利的实现,或多或少大家都会在这个上边吃亏。每年双十一系统调用复盘的时候,我都会听到以下声音你们调我的接口报错了竟然不会自己重试?我的返回值应该从这里取我返回isSuccess()==true,不代表业务成功,你…

    2022年10月13日
    0

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

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