qmake 3.1(Qt 5.14.0使用)用户手册4——创建常见类型的项目

本章介绍如何为基于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子句添加到上面代码中,以对发布模式执行相同的操作。 目标名称保持不变。

发布了19 篇原创文章 · 获赞 0 · 访问量 961

猜你喜欢

转载自blog.csdn.net/xuyouqiang1987/article/details/104076240