专栏首页技术之路翻译qmake文档(四) Building Common Project Types

翻译qmake文档(四) Building Common Project Types

本章原英文文档:http://qt-project.org/doc/qt-5/qmake-common-projects.html

构建常见的项目类型

     本章描述如何设置基于Qt的应用程序、库和插件的三种常见项目类型的qmake项目项目文件。虽然所有的项目类型使用大量相同的变量,但是它们中的每一个都使用项目特定的变量来自定义输出文件。

     这里不会描述特定于平台的变量。更多详细修改请查看  Qt for Windows - Deployment 和 Qt for Mac OS X.

绑定一个应用程序

     app模板告诉qmake生成将要构建应用程序的Makefile.使用这个模板,可以用下边的任何一个选项添加到CONFIG变量定义来指定应用程序的类型:

选项

描述

windows

这个应用程序是一个window 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文件

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

     由于这些项都是单值,像模板或目标目录,我们使用“=”;但对于多值我们使用 "+=" 来添加到现有类型项。使用“=”用新值替换变量的值。例如,如果我们这样写DEFINES=USE_MY_STUFF,其它的所有定义都会被删除

构建测试用例

     一个测试用例项目是用于作为一个自动测试运行的app项目。通过添加testcase到CONFIG变量可以把任何app标记为测试用例。

     对于testcase项目,qmake会在生成的Makefile里插入一个检查目标。这个目标将会运行这个应用程序。如果它终止退出代码等于0这个测试被认为通过。

     检查目标会通过自动递归SUBDIRS项目。这意味着它可能会发出一个使检查命令从SUBDIRS项目内部来运行一个完整的测试套件。

     检查目标的运行可能会被一些Makefile变量自定义。这些变量是

变量

描述

TESTUNNER

在每个测试命令前添加一个命令或shell片段。例如, use-case 是一个 “timeout" 用于如果它在一个指定的时间内没有完成,将被终止测试。

TESTARGS

每附加到每个测试命令的附加参数。例如,它可能有用的传递附加参数从测试设置输出文件和格式化。(就像 QTestLib支持的 -o filename,format选项)

# 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选项中使用下面的配置,更进一步的自定义设置。

选项

描述

insignificat_test

在检查期间测试退出代码将被忽略

     测试用例会被经常使用 QTest 或 TestCase编写,但这并不需要使用 CONFIG+=testcase 和 make check。 唯一主要的需要是测试程序以零退出代码为成功,用非零退出表示失败。

构建库

lib模板告诉qmqke生成一个将要构建一个库的makefile。当使用这个模板,除了app模板支持的的系统变量,也支持VERSION变量。在你的.pro文件里使用这些变量指定这个库的相关信息。     

     当使用lib模板时,下边的选项可以添加到CONFIG变量来确定构建库的类型:

选项

描述

dll

这个库是一个共享库(dll).

staticlib

这个库是一个静态库。

plugin

这个库是一个插件。

 VERSION - 目标库的版本号。如例 2.3.1

     库的目标文件名是依赖于平台的。例如,在X11和Mac OS X,库的名字将用lib作为前缀。在windows平台,文件名没有前缀。

构建插件

     使用lib库来构建插件,就像前一章描述的一样。这用来告诉qmake为工程生成一个Makefile, 将为每一个平台构建一个适当的插件,通常以库的形式。与普通的库一样,VERSION变量指定插件的信息。

 VERSION - 目标库的版本号. 如 2.3.1.

构建Qt Designer 插件

使用一组特定的配置设置来构建Qt Designer插件,这些配置依赖于系统对Qt的配置。为了方便,通过在QT变量里添加designer来启动这些设置。例如:

QT +=  widgets designer
基于插件项目的更多示例,请查看 Qt Designer Examples
在Debug和Release模式下构建和安装
有时,它是必要在debug和release两种模式下构建一个项目。尽管CONFIG变量可以同时保存debug和release两个选项,但是只有最后指定的选项会被应用。
在两种模式下构建
     为了启动项目在两种模式下均构建,你必须把 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)
}

在上面代码片段的默认行为是修改在debug模式下进行构建生成的目标名字。可以把else语句添加到作用域用于在release模式下做同样的事。目标名字未被修改,保持原样。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 翻译qmake文档(三) Creating Project Files

    原英文文档:http://qt-project.org/doc/qt-5/qmake-project-files.html 创建项目文件      项目文件...

    lpxxn
  • c++基础 使用智能指针

    三个智能指针模板(auto_ptr、unique_ptr和shard_ptr)都定义了类似指针的对象(c++11已将auto_ptr摒弃),可以将new获得(直...

    lpxxn
  • sqlserver 行转列

    sqlserver把行转成列在我们编码中是经常遇到的我做一个小例子大家看一下 1 --创建一个表 2 create table PayPhoneMoney ...

    lpxxn
  • 终于明白为什么要加 final 关键字了!

    在开发过程中,由于习惯的原因,我们可能对某种编程语言的一些特性习以为常,特别是只用一种语言作为日常开发的情况。

    良月柒
  • 艾伦·图灵传

    本书是公认的图灵最权威传记。艾伦·图灵是现代计算机科学之父,在24岁时奠定了计算机的理论基础。二战期间,他为盟军破译密码,为结束战争做出巨大贡献。战后,他开创性...

    用户3157710
  • Arcgis Runtime sdk for android 授权

    要下载和安装 ArcGISRuntime SDK for Android,您需要注册开发者账户,进而便拥有了访问所有功能的权限,从而实现开发和测试目的。但是,这...

    水击三千
  • 速读原著-TCP/IP(SNMP管理信息结构)

    S N M P中,数据类型并不多。在本节,我们就讨论这些数据类型,而不关心这些数据类型在实际中是如何编码的。 • I N T E G E R。一个变量虽然定义...

    cwl_java
  • 推荐收藏 | 统计学常用的数据分析方法大总结!

    描述统计是通过图表或数学方法,对数据资料进行整理、分析,并对数据的分布状态、数字特征和随机变量之间关系进行估计和描述的方法。描述统计分为集中趋势分析和离中趋势分...

    1480
  • 统计学中常用的数据分析方法汇总

    描述统计是通过图表或数学方法,对数据资料进行整理、分析,并对数据的分布状态、数字特征和随机变量之间关系进行估计和描述的方法。描述统计分为集中趋势分析和离中趋势分...

    统计学家
  • ASP.NET Core身份认证服务框架IdentityServer4(2)-整体介绍

    晓晨

扫码关注云+社区

领取腾讯云代金券