构建常见项目类型
这一章描述了如何设置基于qt的三种常见项目类型的qmake项目文件,这三种
项目分别是:应用,库和插件。虽然所有的项目类型都使用了许多相同的变量,
但每个项目都使用了专门的变量来定制输出文件。
构建应用程序
app模板告诉qmake生成将构建应用程序的Makefile。使用此模板,
可以通过将以下选项之一添加到CONFIG变量定义来指定应用程序的类型。
选项 | 描述 |
---|---|
Windows | 这个程序是一个Windows GUI应用 |
console | 仅限app模板,这个程序是一个Windows控制台程序 |
testcase | 这个应用是一个自动化测试 |
当使用这个模板时,下面的qmake系统变量可以被识别。你可以在.pro文件里使用
这些变量指定应用程序相关的信息。
- HEADERS -应用程序头文件的列表。
- SOURCES -应用程序c++源文件的列表。
- FORMS - 应用程序UI文件的列表(Qt Designer创建)
- LEXSOURCES -应用程序Lex源文件的列表
- YACCSOURCES - 应用程序Yacc源文件的列表
- TARGET - 应用程序可执行文件的名称。它默认是项目文件的名称。(如果需要扩展名会自动添)
- DESTDIR - 存放目标可执行程序的文件夹 。
- DEFINES - 应用程序需要的额外添加的预处理定义列表。
- INCLUDEPATH - 应用程序所需要的额外包含路径列表。
- DEPENDPATH - 应用程序所依赖的搜索路径。
- VPATH - 用于找到提供文件的搜索路径
- DEF_FILE - 只用于windows :应用程序要链接的.def文件
- RES_FILE - 只用于windows :应用程序的资源文件。
- RES_FILE - 只用于windows :应用程序要链接的资源文件。
你只需要使用你有值的系统变量。例如,如果你没有额外的 INCLUDEPATH那么就不需要指定它。
qmake将会自动添加必须的默认值。一个示例项目文件可能像下边这样:
TEMPLATE = app
DESTDIR = c:/helloapp
HEADERS += hello.h
SOURCES += hello.cpp
SOURCES += main.cpp
DEFINES += USE_MY_STUFF
CONFIG += release
对于单值的项,比如项目模板和目标目录,我们使用“=”,但是对于多值的项,我们使用“+=”来
添加新的值。使用“=”会使用新值取代变量原来的值,
构建一个测试项目
测试项目是一个应用程序项目,旨在作为自动测试运行。 任何应用程序可以通过将值测试案例
添加到CONFIG变量来标记为测试用例。对于testcase项目,qmake将在生成的Makefile中
插入一个检查目标。 该目标将运行应用程序。 如果以等于零的退出码终止,则该测试被认为通过。
检查目标通过SUBDIRS项目自动递归。 这意味着可以从SUBDIRS项目中发出make check命令
来运行整个测试套件。检查对象的执行可以由某些Makefile变量来定制。这些变量是:
变量 | 描述 |
---|---|
TESTRUNNER | 每个测试命令前面都有一个命令或shell片段。 一个示例用例是一个“超时”脚本,如果在指定的时间内没有完成,将终止测试。 |
TESTARGS | 每个测试命令附加的附加参数。 例如,传递其他参数以设置测试中的输出文件和格式(例如,由QTestLib支持的-o filename,format选项)可能是有用的。 |
注意:当调用make工具时,这些变量一定要设置在make中,而不是pro文件中,大多数
make工具支持直接在命令行中设置变量:
# Run tests through test-wrapper and use xunitxml output format.
# In this example, test-wrapper is a fictional wrapper script which terminates
# a test if it does not complete within the amount of seconds set by "--timeout".
# The "-o result.xml,xunitxml" options are interpreted by QTestLib.
make check TESTRUNNER="test-wrapper --timeout 120" TESTARGS="-o result.xml,xunitxml"
使用CONFIG选项可以更好的定制测试项目
选项 | 描述 |
---|---|
insignificant_test | 在测试期间退出码会被忽略 |
测试项目通常会使用QTest类或TestCase来写,但CONFIG+=testcase
和
make check
并不是必须的。唯一的重要需求就是测试程序以0退出即为成功,
非零即失败。
构建库
lib模板告诉qmake生成一个将构建一个库的Makefile。 使用此模板时,除了
应用程序模板支持的系统变量外,还支持VERSION变量。 使用.pro文件中的
变量来指定有关库的信息。
当使用lib模板时,下面这些选项将可以添加到CONFIG中,它们决定了库的类型:
选项 | 描述 |
---|---|
dll | 这是一个共享库 |
staticlib | 这是一个静态库 |
plugin | 这是一个插件 |
变量VERSION 目标库的版本号
目标库的文件名是平台相关的,例如,在X11,OS X还有iOS,库的名字将用lib
作为前缀。在windows平台,文件名没有前缀。
构建插件
就像上一节描述的那样,插件是使用lib模板进行构建的。这告诉qmake为项目生成
一个Makefile,它将为每个平台以一种合适的形式构建一个插件,通常以库的形式。
构建Qt Designer插件
Qt Designer插件是使用特定的一组配置设置构建的,这组设置取决于QT在你系统
上的配置。为方便起见,可以通过将designer添加到QT变量来启用这些设置:
QT += widgets designer
请查看 Qt Designer Examples 以获取更多信息
在debug和release模式下的构建与安装
有时,一个项目同时在debug和release模式下构建是必要的。虽然CONFIG变量可以
同时包含debug和release两个选项,但是只有最后一个会起作用。
同时构建
想要在同时构建两种模式,你必须在变量CONFIG中添加debug_and_release
选项:
CONFIG += debug_and_release
CONFIG(debug, debug|release) {
TARGET = debug_binary
} else {
TARGET = release_binary
}
上述代码段中的域会修改每个模式中的构建目标,以确保生成的目标具有不同的名称。
为目标提供不同的名称可确保不会覆盖另一个。
当qmake处理项目文件时,它会在makefile中生成一个特殊的规则,这个规则可以
同时构建两种模式。用下列语句调用它:
make all
向变量”CONFIG”中添加build_all选项可以将all规则设为默认规则。
CONFIG += build_all
同时安装
build_all选项还确保在调用安装规则时将安装目标的两个版本
make install
可以根据目标平台自定义构建目标的名称。
例如,可以使用与Unix平台上使用的Windows不同的约定命名库或插件:
CONFIG(debug, debug|release) {
mac: TARGET = $$join(TARGET,,,_debug)
win32: TARGET = $$join(TARGET,,d)
}
上述代码片段中的默认行为是在调试模式下修改用于构建目标的名称。
可以把else语句添加到作用域用于在release模式下做同样的事。目标名称保持不变。