目录
本章介绍如何为基于Qt的三种常见项目类型设置qmake项目文件:应用程序,库和插件。 尽管所有项目类型都使用许多相同的变量,但是每个项目类型都使用特定于项目的变量来自定义输出文件。
此处不介绍特定于平台的变量。 有关更多信息,请参阅Windows的Qt-部署和macOS的Qt。
建立应用程序
应用程序模板告诉qmake将生成应用程序的Makefile。 使用此模板,可以通过在CONFIG变量定义中添加以下选项之一来指定应用程序的类型:
选项 | 描述 |
windows | 该应用程序是Windows GUI应用程序。 |
console | 仅限应用程序模板:该应用程序是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文件。
您只需要使用具有其值的系统变量。例如,如果您没有任何额外的INCLUDEPATH,则无需指定任何路径。 qmake将添加必要的默认值。示例项目文件可能如下所示:
TEMPLATES = app
DESTDIR = c:/helloapp
HEADERS += hello.h
SOURCES += hello.cpp
SOURCES += main.cpp
DEFINES += USE_MY_STUFF
CONFIG += 发布
对于单值变量(例如模板或目标目录),我们使用“=”;但是对于多值变量,我们使用“+=”来添加到该类型的现有变量中。使用“ =”会将变量值替换为新值。例如,如果我们编写DEFINES = USE_MY_STUFF,则所有其他定义都将被删除。
建立一个测试用例
测试用例项目是旨在作为自动化测试运行的应用程序项目。通过将值testcase添加到CONFIG变量,可以将任何应用程序标记为testcase。
对于测试用例项目,qmake会将检查目标插入到生成的Makefile中。该目标将运行该应用程序。如果测试以退出代码等于0终止,则认为测试通过。
检查目标自动通过SUBDIRS变量递归。这意味着可以从SUBDIRS变量中发出make check命令来运行整个测试套件。
可以通过某些Makefile变量自定义检查目标的执行。这些变量是:
变量 | 描述 |
TESTRUNNER | 每个测试命令之前都有一个命令或shell片段。 一个示例用例是“超时”脚本,如果该脚本在指定时间内未完成,它将终止测试。 |
TESTARGS | 其他参数附加到每个测试命令。 例如,传递额外的参数来设置测试的输出文件和格式(例如-QTestLib支持的-o filename,format选项)可能会很有用。 |
注意:变量必须在调用make工具时设置,而不是在.pro文件中设置。 大多数make工具直接在命令行上支持Makefile变量的设置:
# 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 | 在进行make检查期间,将忽略测试的退出代码。 |
测试用例通常将用QTest或TestCase编写,但这不是使用CONFIG += testcase进行检查的要求。 唯一的主要要求是测试程序在成功时以零退出代码退出,在失败时以非零退出代码退出。
创建库
lib模板告诉qmake生成将构建库的Makefile。 使用此模板时,除了应用程序模板支持的系统变量外,还支持VERSION变量。 使用.pro文件中的变量来指定有关库的信息。
使用lib模板时,可以将以下选项添加到CONFIG变量中,以确定所构建的库的类型:
选项 | 描述 |
dll | 该库是一个共享库(dll)。 |
staticlib | 该库是一个静态库。 |
plugin | 该库是一个插件。 |
还可以定义以下选项以提供有关库的其他信息。
VERSION - 目标库的版本号。例如,2.3.1。
库的目标文件名取决于平台。例如,在X11,macOS和iOS上,库名称将以lib为前缀。在Windows上,没有前缀添加到文件名。
创建插件
如上一节所述,使用lib模板构建插件。这告诉qmake为项目生成一个Makefile,该文件将以适合每种平台的形式(通常以库的形式)构建插件。与普通库一样,VERSION变量用于指定有关插件的信息。
VERSION - 目标库的版本号。例如,2.3.1。
创建Qt Designer插件
Qt Designer插件是使用一组特定的配置设置构建的,这些配置设置取决于为您的系统配置Qt的方式。为了方便起见,可以通过将设计器添加到QT变量来启用这些设置。例如:
QT += 小部件设计器
有关基于插件项目的更多示例,请参见Qt Designer示例。
在调试和发布模式下创建和安装
有时,有必要在调试和发布模式下都构建项目。尽管CONFIG变量可以同时包含调试和发布选项,但仅应用最后指定的选项。
在两种模式下构建
要使项目可以在两种模式下构建,必须将debug_and_release选项添加到CONFIG变量:
CONFIG += debug_and_release
CONFIG(debug, debug|release) {
TARGET = debug_binary
} else {
TARGET = release_binary
}
上面的代码在每种模式下都会修改构建目标,以确保生成的目标具有不同的名称。 为目标提供不同的名称可确保一个目标不会覆盖另一个目标。
当qmake处理项目文件时,它将生成一个Makefile规则,以允许在两种模式下构建项目。 可以通过以下方式调用它:
make all
可以将build_all选项添加到项目文件中的CONFIG变量中,以确保默认情况下以两种模式构建项目:
CONFIG += build_all
这样就可以使用默认规则处理Makefile:
make
在两种模式下安装
build_all选项还确保在调用安装规则时将同时安装目标的两个版本:
make install
可以根据目标平台自定义构建目标的名称。 例如,在Windows上使用与在Unix平台上不同的约定来命名库或插件:
CONFIG(debug, debug|release) {
mac: TARGET = $$join(TARGET,,,_debug)
win32: TARGET = $$join(TARGET,,d)
}
以上代码段中的默认行为是在调试模式下进行构建时,修改用于构建目标的名称。 可以else子句添加到上面代码中,以对发布模式执行相同的操作。 目标名称保持不变。