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

简介:

翻译qmake文档 目录

 

本章原英文文档: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选项)
注意: 当调用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选项中使用下面的配置,更进一步的自定义设置。
选项 描述
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模式下做同样的事。目标名字未被修改,保持原样。

本文转自lpxxn博客园博客,原文链接:http://www.cnblogs.com/li-peng/p/4026116.html,如需转载请自行联系原作者
相关文章
电脑上扫码支付功能用法
  PC扫码支付的方式,支持前置模式和跳转模式。  前置模式是将二维码前置到商户的订单确认页的模式。需要商户在自己的页面中以 iframe 方式请求支付宝页面。具体分为以下几种:  0:订单码-简约前置模式,对应 iframe 宽度不能小于600px,高度不能小于300px; qr_pay...
3574 12
|
C#
WPF之VLC流媒体播放
原文:WPF之VLC流媒体播放 最近在做关于在WPF使用VLC流媒体播放的问题,现在可以在WPF中实现VLC本地播放了,流播放解决了,在下面的代码中注释流媒体播放那两段代码,更多的在乎大家摸索了^^,以供大家相互学习,这里我就先把实现VLC本地播放的代码和过程写给需要的朋友参考。
2908 0
c# 创建文件夹
在 C# 中,创建文件夹和文件依赖于 .NET 框架提供的 `System.IO` 命名空间中的类与操作系统交互。
|
存储 供应链 数据可视化
惊艳!2025 蛇年新春汉服租赁管理软件哪家强?实测告诉你!
随着汉服热潮升温,2025蛇年新春临近,汉服制作与租赁行业迎来业务高峰。MBTI-J型管理者需高效协作工具,可视化团队协作软件成关键。本文推荐6款精品软件:板栗看板、Miro、Asana、Notion、Slack和Airtable。这些工具分别在流程管理、创意协作、任务分配、知识沉淀、沟通优化及数据统筹等方面各显神通,助力汉服企业提升效率、精准决策,确保新春活动顺利开展,推动品牌发展。
266 5
|
开发框架 前端开发 小程序
跨平台开发框架的选择应该考虑哪些因素?
【10月更文挑战第25天】综合考虑以上因素,能够帮助您更准确地选择适合项目需求的跨平台开发框架,从而提高项目的成功率和开发效率,为用户提供更好的应用体验。
|
运维 安全 物联网
物联网:NB卡在使用过程中存在的一些限制和需要特别注意的操作事项
物联网NB卡(通常指的是窄带物联网(NarrowBand Internet of Things, NB-IoT)卡)是专为物联网设备设计的无线通信模块,主要用于连接物联网设备与移动网络,实现远程数据交换和控制。然而,在使用物联网NB卡时,确实存在一些限制和操作上的考虑因素。以下是一些主要的限制和操作注意事项:
|
机器学习/深度学习 自然语言处理 算法
超越传统搜索:探索基于GraphRAG的信息检索新范式
【10月更文挑战第10天】随着信息爆炸时代的到来,如何从海量的数据中快速准确地找到所需的信息成为了一个亟待解决的问题。传统的信息检索系统主要依赖于关键词匹配和文档排名算法来提供结果,但这种方法往往无法捕捉到数据间的复杂关系,也无法很好地理解用户的查询意图。近年来,一种新的信息检索方法——基于图的检索增强生成(Graph-based Retrieval-Augmented Generation, GraphRAG)应运而生,它通过结合知识图谱与机器学习技术,为信息检索带来了全新的视角。
483 1
|
Python
Python 中的关键字是什么?
【8月更文挑战第29天】
953 8
|
安全 Linux 网络安全
龙蜥Anolis OS:国产操作系统的逆袭之路,它将如何引领中国IT业翻天覆地的变化?揭秘未来数字世界的心脏!
【9月更文挑战第4天】在信息化时代,操作系统作为计算机系统的核心,连接着上层软件与底层硬件。随着全球化及地缘政治的影响,国产操作系统愈发重要。龙蜥Anolis OS作为佼佼者,基于Linux内核,兼具开源、灵活与安全特性,针对国内用户优化,支持多种编码标准和汉字输入法,提升中文用户体验。其采用角色访问控制、SELinux等技术,保障系统安全。Anolis OS还拥有活跃的开源社区,促进功能完善与创新。随着国家政策扶持和产业链协同,Anolis OS正引领国产操作系统迈向更广阔的应用领域,推动软硬件生态系统的成熟,成为全球多元化计算生态的重要组成部分。
664 1
|
人工智能 自然语言处理 测试技术
这些VLM竟都是盲人?GPT-4o、Sonnet-3.5相继败于视力测试
【7月更文挑战第28天】新研究表明VLM在简单视觉任务上的局限性。论文《Vision language models are blind》指出, GPT-4o、Claude-3.5 Sonnet等顶级模型在如判断形状重叠或字母识别等基本任务上表现不佳。另一研究在CVPR'24上介绍了一个新框架, 利用TRUMANS数据集生成精细的人物动作, 包括手部运动, 显示出在复杂场景下的强大能力, 尽管仍面临一定的局限。[论文链接](https://arxiv.org/pdf/2407.06581) [TRUMANS](https://arxiv.org/pdf/2403.08629)
343 4