qmake在生产项目中的应用实践

3 篇文章 0 订阅

qmake在生产项目中的应用实践

qmake基础语法

详情参考[qmake手册]1

入门参考cnblogs 一篇文章,
我们使用到的知识点有:

.pro中变量含义示例
TEMPLATE模板变量指定生成makefile(app:应用程序/lib:库)TEMPLATE = app
QT使用到的Qt定义的类(core/gui/widgets…)QT += widgtes
DESTDIR指定生成的应用程序放置的目录DESTDIR += …/bin
TARGET指定生成的应用程序名TARGET = hello
HEADERS工程中包含的头文件HEADERS += hello.h
FORMS工程中包含的.ui设计文件FORMS += hello.ui
SOURCES工程中包含的源文件SOURCES += main.cpp hello.cpp
RESOURCES工程中包含的资源文件RESOURCES += qrc/hello.qrc
LIBS引入的lib文件的路径 -L:引入路径LIBS += -L.
CONFIG用来告诉qmake关于应用程序的配置信息CONFIG+= qt warn_on release
UI_DIR指定.ui文件转化成ui_*.h文件的存放目录UI_DIR += forms
RCC_DIR指定将.qrc文件转换成qrc_*.h文件的存放目录RCC_DIR += …/tmp
MOC_DIR指定将含Q_OBJECT的头文件转换成标准.h文件的存放目录MOC_DIR += …/tmp
OBJECTS_DIR指定目标文件(obj)的存放目录OBJECTS_DIR += …/tmp
DEPENDPATH程序编译时依赖的相关路径DEPENDPATH += . forms include qrc sources
INCLUDEPATH头文件包含路径INCLUDEPATH += .
DEFINES增加预处理器宏(gcc的-D选项)DEFINES += USE_MY_STUFF
QMAKE_CFLAGS设置c编译器flag参数QMAKE_CFLAGS += -g
QMAKE_CXXFLAGS设置c++编译器flag参数QMAKE_CXXFLAGS += -g
QMAKE_LFLAGS设置链接器flag参数QMAKE_LFLAGS += -rdynamic

1. TEMPLATE变量

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

  • app:建立一个应用程序Makefile,这个也是默认值,没有指定模板是默认是这个。
  • lib:建立一个库的Makefile。
  • vcapp:建立一个应用程序的visual studio项目文件。
  • vclib:建立一个库的visual studio项目文件。
  • subdirs:创建一个能够进入子目录并且为之生成为它调用make的Makefile。需要在后面用SUBDIRS=XX来指定那些子目录。

2. CONFIG变量

  • 控制编译器标志的选项:

    • 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模板,库是一个共享库。
    • staticlib:只用于lib模板,库是一个静态库。
    • plugin:只用于lib模板,库是一个插件,这将会使dll选项生效。
    • 例如:CONFIG += qt debug,使用qt库的应用程序,debug版本。
  • 注意事项:必须使用“+=”,不要使用“=”,否则原来的设置会被清除。

3. 变量用法:

  • 自定义变量:

MY_VARIABLE = value

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

  • 变量值的传递:

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

MY_DEFINES = $$DEFINES

MY_DEFINES = $${DEFINES}

4. qmake系统变量

  • 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变量参考]2

5. subdirs模板

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

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

实战开发

下面介绍从现有项目生成qmake项目管理文件pro过程

  1. 进入项目所在路径

qmake -project会自动生成项目文件 app.pro

这里生成的项目文件并不是我们期望的,接下来修改 app.pro 文件内容

添加 Qt库支持等一些配置:

QT += core widgets network xml sql webenginewidgets
TEMPLATE = app
CONFIG += console

include($$PWD/common.pri)

  1. 配置输出路径等:
DESTDIR += ./build/$$PLATFORM/bin
RCC_DIR += ./build/$$PLATFORM/tmp/rcc
UI_DIR  += ./build/$$PLATFORM/tmp/ui

CONFIG(debug, debug|release) {
    MOC_DIR += ./build/$$PLATFORM/tmp/moc/debug
    OBJECTS_DIR += ./build/$$PLATFORM/tmp/obj/debug
}
CONFIG(release, debug|release) {
    MOC_DIR += ./build/$$PLATFORM/tmp/moc/release
    OBJECTS_DIR += ./build/$$PLATFORM/tmp/obj/release
}
  1. 另外我们需要使用预编译头
CONFIG +=precompile_header
precompile_header:!isEmpty(PRECOMPILED_HEADER) {
    DEFINES += USING_PCH
}
# Use Precompiled headers (PCH)
PRECOMPILED_HEADER = stdafx.h

详细参考[qmake预编译头]3

  1. 接下来正常操作添加头文件、库路径等
$$PROJECT_DIR = $$PWD/src
INCLUDEPATH += $$PROJECT_DIR
HEADERS += $$files($$PROJECT_DIR/*.h, true)
SOURCES += $$files($$PROJECT_DIR/*.cpp, true)

FORMS += $$files($$PROJECT_DIR/UI/*.ui, true)
RESOURCES += $$PROJECT_DIR/Resource/*.qrc
TRANSLATIONS += $$PROJECT_DIR/Resource/*.ts

LIBS += -L./lib -llibcurl -llibeay32 -lssleay32 -lsqlite3 -lzdll
  1. windows下添加图标、manifest资源文件等
win32 {
    RC_FILE = $$PROJECT_DIR/Resource/resource.rc
}

  1. https://doc.qt.io/qt-5/qmake-manual.html ↩︎

  2. https://doc.qt.io/qt-5/qmake-variable-reference.html#pro-file-pwd ↩︎

  3. https://doc.qt.io/qt-5/qmake-precompiledheaders.html ↩︎

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值