Qt 编译方式之 qbs

article/2025/11/7 20:40:51

作者:billy
版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处

QBS简介

QBS(Qt Build Suite)同 qmake、cmake 之类一样都是构建工具。QBS 号称是下一代的构建工具(博主的理解上一代是基于 makefile 的构建工具)。根据官网介绍,Qbs 极有可能会替代 qmake 成为 Qt 6.0 的构建系统,与 qmake 相比,Qbs 提供了更快构建速度,以及更多的特性

和qmake不一样,qbs没有绑定Qt版本,它从项目文件的高级项目描述中生成一个正确的编译表(依赖表)。而传统的MakeFile生成工具比如qmake和CMake生成了makefile文件,然后将实际的命令留给make或者ninja这样的工具去执行。Qbs的另一方面就是充当了并行生成与直接调用编译器、连接器以及其他工具的角色,非常像SCons和Ant做的事情。

Declarative语言

qbs的语法是一个简化版本的qml,提供了对IDE友好的软件项目的展示。它同样提供了自由使用任何JavaScript表达式进行属性绑定的支持。
万事从 “Hello world” 开始,我们创建一个最基础的程序来看下 qbs 如何构建项目:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

consoleApplication: true 代表了这是一个控制台程序。
files: “main.cpp” 则列出了源文件(不仅仅只是 C++头文件和源文件)
多个文件时:files: [“foo.h”, “foo.cpp”, “main.cpp”]
fileTagsFilter: “application” 代表的意思就是 CppApplication 的 type 属性为 “application”, CppApplication 是一个可执行程序,常用的类型还有 dynamiclibrary(动态库)、staticlibrary 静态库。

Group 将一组在某些行为上是一样的文件组合成一组,比如某些将安装到同一目录下的文件。
Group 分组的对象是文件,如果 Group 项内没有指定有效文件,那么这个 Group 是会被忽略的。
Group 项指定文件可以用 files 属性或 fileTagsFilter 属性,这两个属性是互斥的只能用其一。
files: 指定文件列表。
fileTagsFilter: 指定文件标记名,通过标记名来匹配文件。

qbs Property Documentation

  1. architecture : string
    目标平台的处理器体系结构
    未定义表示目标平台独立于体系结构(例如clr或jvm),此属性通常在配置文件中设置。
    常用值为:“x86”、“x86_64”和“arm”,默认:未定义。

  2. architectures : stringList
    产品将为其构建的体系结构
    默认值:Android上是[armv5te],与苹果平台上的xcode相同,否则等同于[qbs.architecture]。

  3. buildVariant : string
    构建模式的名称
    可能的值是“debug”和“release”。如果 qbs.configurationname 为“release”,则默认为“release”,否则为“debug”。

  4. buildVariants : stringList
    构建模式的名称列表
    默认值:相当于[qbs.buildvariant]。

  5. debugInformation : bool
    是否生成调试信息
    默认值:对于调试版本为true,否则为false。

  6. enableDebugCode : bool
    是否在产品中启用调试功能。不要与生成调试符号或代码优化级别混淆。
    通常,此属性对 debug 启用,对 release 禁用。
    默认值:对于调试版本为true,否则为false。

  7. hostOS : stringList
    此属性由QBS内部设置,并指定OS QBS正在运行
    此属性的可能值是TargetOS的值,即使其中某些值可能不受支持,默认:未定义。

  8. hostPlatform : string
    主机平台,注:不要使用此属性
    默认:自动确定。

  9. install : bool
    是否安装某组文件
    此属性通常设置在组项中,以将多个文件标记为可安装。
    注意:启用此属性的项目将自动接收文件标记“installable”。这对于编写与包装相关的规则很有用,默认值:false

  10. installDir : string
    产品或组文件的安装目录
    此属性的值是相对于InstallPrefix的路径,默认:未定义

  11. installPrefix : string
    全局安装前缀。它隐式地预加在installdir的所有值之前。
    此属性本身的值在安装上下文中相对于InstallRoot,默认:[]

  12. installRoot : string
    全局安装根目录
    在安装上下文中,它隐式地预加了installPrefix的所有值。
    注意:此属性与InstallDir和InstallPrefix有根本不同,因为它对正在构建的代码不可见。实际上,install根目录通常只是用于打包二进制文件的临时位置,因此不应假定它们在运行时位于该位置。出于同样的原因,通常不从项目文件中设置此属性。默认值:/install-root

  13. installSourceBase : string
    要安装的本地文件的基目录
    从installdir中指定的目标目录路径中省略源基目录。
    默认:要安装的当前文件的目录,相对于产品的源目录。

  14. nullDevice : string
    与空设备对应的平台特定文件路径
    默认值:在Windows上为“nul”,在Unix上为/dev/null。

  15. optimization : string
    所有工具链都应执行的一般优化类型
    允许值为:
    “fast”
    “none”
    “small”
    默认值:调试版本为“none”,发布版本为“fast”。

  16. pathListSeparator : string
    环境变量或其他上下文中使用的路径列表的平台特定分隔符
    在Windows上默认为“;”,在Unix上默认为“:”。

  17. profiles : stringList
    构建产品的配置文件
    对于这里列出的每个概要文件,将根据各自概要文件中设置的属性构建一个产品实例。
    默认值:[project.profile]

  18. shellPath : path
    与命令行解释器对应的平台特定文件路径
    在Windows上,这是保存在comspec环境变量(通常是c:/windows/system32/cmd.exe)中的cmd.exe的路径,在类Unix平台上,这是/bin/sh。
    默认值:Windows上"%COMSPEC%",Unix上“bin/sh”

  19. sysroot : string
    目标平台的sysroot
    此属性通常设置在用于交叉编译的配置文件中。默认:未定义

  20. targetOS : stringList
    指定要为其生成项目的操作系统
    使用此属性在条件中测试特定OS或OS系列。请勿为此目的使用TargetPlatform。
    可能的值包括“bsd”、“darwin”和“unix”中的一个或多个,以及targetform的可能值。
    默认:未定义

  21. targetPlatform : stringList
    要为其生成项目的操作系统
    此属性通常设置在配置文件中或特定产品中,目标操作系统始终是已知的(例如以本机代码编写的Apple Watch应用程序)。通常应将此属性视为只写,并避免使用它来测试当前目标操作系统。
    可能的值包括以下一个或多个:

"aix"
"android"
"freebsd"
"haiku"
"hpux"
"hurd"
"integrity"
"ios"
"ios-simulator"
"linux"
"lynx"
"macos"
"netbsd"
"openbsd"
"qnx"
"solaris"
"tvos"
"tvos-simulator"
"vxworks"
"watchos"
"watchos-simulator"
"windows"

默认:未定义

  1. toolchain : stringList
    工具链的属性用于构建
    典型值包括“llvm”,以及toolchaintype的可能值。默认:未定义

  2. toolchainType : string
    工具链用于构建
    通常应将此属性视为只写,并避免使用它来测试当前的工具链。
    典型值包括:“gcc”、“clang”、“mingw”、“msvc”和“xcode”。
    默认:自动确定。

  3. [read-only] configurationName : string
    当前生成配置的名称
    构建配置是通过命令行参数config设置的。默认:“default”

  4. [read-only] hostOSBuildVersion : string
    主机操作系统的内部版本
    目前,仅为Windows和Apple平台定义,默认:未定义
    在Windows上,这是4位或5位Windows内部版本号,相当于versionPatch。
    在苹果平台上,这是苹果版本控制方案中的标准版本号。例如,“13C64”。

  5. [read-only] hostOSVersion : string
    主机操作系统版本
    目前,仅为Windows和Apple平台定义, 默认:未定义
    由两个或三个由点分隔的数字组成。例如,“10.9”或“6.3.9600”。

  6. [read-only] hostOSVersionParts : list
    主机操作系统版本列表
    例如,Windows8.1(版本6.3.9600)对应的值为[6,3,9600],默认:[]

  7. [read-only] hostOSVersionMajor : int
    主机操作系统主版本
    默认值:hostoVersionParts[0]

  8. [read-only] hostOSVersionMinor : int
    主机操作系统次版本
    默认值:hostosVersionParts[1]

  9. [read-only] hostOSVersionPatch : int
    主机操作系统修补程序级别
    默认值:hostosVersionParts[2]

  10. [read-only] version : string
    QBS版本号。例如,“1.4.1”。

  11. [read-only] versionMajor : int
    QBS的主要版本号

  12. [read-only] versionMinor : int
    QBS的次要版本号

  13. [read-only] versionPatch : int
    QBS的补丁版本号

Group QML Type

  1. condition : bool
    确定组中的文件是否实际视为项目的一部分。默认值:true

  2. excludeFiles : list
    从文件列表中减去的文件列表。使用通配符时很有用。默认:一个空的列表

  3. fileTags : list
    要附加到组文件的文件标记列表。然后可以用一个规则来匹配它们。
    注意:文件标记器从不应用于设置了此属性的文件。默认:一个空的列表

  4. fileTagsFilter : list
    要匹配的artifact.filetags列表
    此组中设置的任何属性都将应用于产品的工件,其文件标记与此处列出的标记匹配。
    组的file tags属性指定的文件标记将添加到匹配的项目中。此属性与文件互斥。
    默认:一个空的列表

  5. files : list
    组中的文件。与FileTagsFilter互斥。
    使用包含组项的文件的父目录解析相对路径。但是,如果prefix属性设置为绝对路径,则该路径将成为基目录。默认:一个空的列表

  6. filesAreTargets : bool
    如果此属性为true且组位于模块中,则组中的文件将不会成为依赖于模块的产品的源工件。相反,它们被视为产品的目标工件。也就是说,它们将与依赖模块的产品中的规则的inputsFromDependencies文件标记列表相匹配。默认值:false

  7. name : string
    组的名称。不在内部使用;主要用于IDE。
    默认值:“Group x”,其中x是产品中所有组中的唯一数字。

  8. overrideTags : bool
    确定如何处理同时在产品(或父组,如果有)和组的顶级列出的文件上的标记
    如果此属性为真,则通过组设置的文件标记将替换通过产品或父组设置的标记。如果为假,则将组标记添加到父标记中。如果设置了FileTagsFilter,则忽略此属性。默认值:true

  9. prefix : string
    用于预处理所有文件的字符串。允许斜杠并具有目录语义。
    默认值:父组的前缀(如果存在),否则为空。

案例

通常我们使用Group 指定安装文件的目标目录
要安装一组文件,请将该组的 qbs.install 属性设置为true,qbs.installdir 的值指定文件安装目录的路径。可以将所有安装目录的基目录指定为 qbs.installPrefix 的值。
例如,以下属性指定在Windows和Linux上安装一组QML文件和应用程序可执行文件的位置:

 Application {name: "myapp"Group {name: "Runtime resources"files: "*.qml"qbs.install: trueqbs.installDir: condition: qbs.targetOS.contains("unix")? "share/myapp" : "resources"}Group {name: "The App itself"fileTagsFilter: "application"qbs.install: trueqbs.installDir: "bin"}qbs.installPrefix: condition: qbs.targetOS.contains("unix")? "usr/local" : "MyApp"}

在Windows上,qml文件最终将安装在myapp\resources中,应用程序可在myapp\bin中执行。
在Linux上,qml文件将安装在/usr/local/share/myapp中,可执行文件将安装在/usr/local/bin中。

前景

这是一个试验性质的项目,用来试验不同编译工具概念。qmake仍然会存在很长一段时间,并且没人会强迫谁去使用qbs,或者其它任何编译工具。尽管在某些时候我们肯定会尝试将qbs作为Qt自身的编译系统来使用。

通用元编译工具,比如CMake或者GNU Autotools的用户也许注意到了,严谨来说,qbs与跨平台编译工具相比有一个关键部分的缺失:适应宿主环境,就是所谓的配置检查。当前,qbs仍然需要一个外部的配置脚本来生成一个JSON格式的文件,从而能被qbs调用。但是这终究不是一个长久的解决方法。关键点在于使配置测试像其他模块一样可用。其实现当然不止包括了Declarative,还包含了一些JavaScript代码。


http://chatgpt.dhexx.cn/article/obRg5780.shtml

相关文章

QBC查询及语法

QBC(Query By Criteria)查询方式是Hibernate提供的“更加面向对象”的一种检索方式。QBC在条件查询上比HQL查询更为灵活,而且支持运行时动态生成查询语句。 在Hibernate应用中使用QBC查询通常经过3个步骤 (1)使用Session实例的createCriteria()方法创建Criteria对…

Hibernate 之QBC

一、Hibernate 中聚合函数的使用 Criteria接口的Projections类主要用于帮助Criteria接口完成数据的分组查询和统计功能: List cats session.createCriteria(Cat. class ) .setProjection(Projections.projectionList() .add(Projections.rowCount…

Qt6 中如何使用 qsb

【写在前面】 Qt 5 的图形体系结构非常依赖 OpenGL 作为底层 3D 图形 API。但过去 8 年来随着 Metal 和 Vulkan 的推出,市场发生了巨大变化。现在,Qt 6 加入了大量不同平台的图形 API,以确保用户可以在所有平台上以最高性能运行 Qt。 在 Qt Q…

MyBatis十:逆向工程(QBC风格)

逆向工程 一、创建逆向工程 创建依赖pom.xml <packaging>jar</packaging><!-- 依赖MyBatis核心包 --> <dependencies><dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.5…

QBC 查询

当使用 hibernate 的 QBC 进行查询的时候&#xff0c;无需写 sql 语句&#xff0c;使用的是 Criteria 对象中的方法进行的实现&#xff0c;创建 Criteria 对象的时候&#xff0c;需要传入一个实体类.class&#xff0c;会自动关联该实体类对应的数据库表。 一&#xff1a;查询所…

Hibernate--QBC举例+详解(一)

QBC检索 QBC&#xff08;Query By Criteria&#xff09;是Hibernate提供的另一种检索对象的方式&#xff0c;它主要由Criteria接口、Criterion接口和Expression类组成。 Criteria接口是Hibernate API中的一个查询接口&#xff0c;它需要由session进行创建。一个单独的查询就是…

统一软件开发过程(RUP)的概念和方法

统一软件开发过程&#xff08;Rational Unified Process,RUP)是一种面向对象且基于网络的程序开发方法论。 根据Rational(Rational Rose和统一建模语言的开发者)的说法&#xff0c;好像一个在线的指导者&#xff0c;它可以为所有方面和层次的程序开发提供指导方针&#xff0c;…

程序员技术开发委托合同模板 私活模板

---需要电子word版&#xff0c;请关注--------- 回复&#xff1a;私活 含税与不含税计算工具&#xff1a; 假设税率是6% 不含税金额&#xff1d;总金额/1.06 税额&#xff1d;不含税金额0.06 增值税在线计算器&#xff1a;http://www.ab126.com/goju/7332.html 大小写转换&…

软件开发模型

1.1大爆炸模型 大爆炸默认是相对简单的开发模型&#xff0c;在开发过程中&#xff0c;没有什么规范和计划&#xff0c;更没有测试 1.2 边做边改模型 相对于大爆炸模型&#xff0c;考虑到了项目需求&#xff0c;然后开发来回的编写&#xff0c;测试&#xff0c;修改缺陷的过程…

10种软件开发模型整理

准备整理一下软件模型&#xff0c;但是百度到都是零散信息&#xff0c;所以文章准备从概念、模型核心思想、优点、缺点、生命周期等体现各个软件模型 什么是软件模型 软件开发模型(Software Development Model)是指软件开发全部过程、活动和任务的结构框架。软件开发包括需求、…

系统软件开发基础知识

系统软件开发基础知识 最近最火的是孩子考了多少分&#xff0c;能上那个好大学&#xff0c;出现了我的大学的我的梦。 他们的大学他们的梦&#xff0c;我是啥&#xff0c;我的软件我的梦。 下面了解到的基础知识做一个归纳&#xff0c;本人了解这方面的知识点可能很片面&…

软件开发测试验收通知书,软件项目开发-客户告知书

为确保项目进度快速进行&#xff0c;在域名备案、开通相关第三方接口、确认功能文档、UI设计沟通和验收等阶段&#xff0c;恳请贵方百忙之中抽出时间积极配合&#xff0c;同时也为避免以后双方产生不必要的纠纷&#xff0c;特此告知贵方在项目进行过程中提供如下必要的配合条件…

利用Windows注册Dll或其他文件

注册Dll文件 前章 有时候&#xff0c;我要使用ActiveX控件&#xff0c;但是。如果别人给了一个Dll没注册进去怎么办。 注册 在电脑开始界面->运行->输入regsvr32“Dll文件所在路径”&#xff08;也可以用winR快捷键输出&#xff09;&#xff0c;如下图&#xff1a;

DLL注入——使用注册表

1.简介 整个系统的配置都保存在注册表中&#xff0c;我们可以通过调整其中的设置来改变系统的行为。 该方式依赖User32.dll&#xff0c;也就是说&#xff0c;需要可执行程序调用到这个系统动态库&#xff0c;我们注入的dll才会被执行到。基本上所有基于GUI的应用程序都使用了…

如何手动运行dll文件,非注册dll

遇到一个dll文件的恶意样本&#xff0c;cuckoo沙箱给出的运行命令如下&#xff1a; cd C:\Windows\System32\ rundll32.exe C:\coreshell.dll,DllMain 方法&#xff1a;rundll32.exe 文件位置,DllMain but会弹出警告 另外一种方法&#xff0c;在专家的文章中有提到 DllM…

怎样在计算机上注册dll文件,win10如何注册dll文件_win10系统dll文件怎样安装

在win10系统中&#xff0c;有着大量的dll文件&#xff0c;这是一种计算机上的一类文件&#xff0c;而且一个DLL文件也可能被不同的应用程序使用&#xff0c;但是许多用户可能都不知道win10注册dll文件的操作&#xff0c;那么win10如何注册dll文件呢&#xff1f;接下来就来告诉大…

Win10注册DLL办法

测试环境&#xff1a;win7 64位系统自动升级到win10 64位系统 经验提升&#xff1a;不要在开始-运行-CMD里面执行&#xff0c;不起作用。 注册步骤如下&#xff1a; 1、准备要注册的DLL文件到指定目录 2、新建一个BAT文件&#xff0c;写入注册命令 3、右键已管理员身份运行注…

怎样在计算机上注册dll文件,注册dll文件【搞定步骤】

喜欢使用电脑的小伙伴们一般都会遇到win7系统注册dll文件的问题&#xff0c;突然遇到win7系统注册dll文件的问题就不知道该怎么办了&#xff0c;其实win7系统注册dll文件的解决方法非常简单&#xff0c;按照 1&#xff1a;在电脑桌面上&#xff0c;依次选中菜单项开始--运行&am…

C#【必备技能篇】注册dll+批量注册dll

文章目录 问题描述&#xff1a;一、注册单个dll&#xff1a;1、把相应的dll放置到System32&#xff08;32位&#xff09;和SysWOW64中2、以管理员身份打开“命令提示符”3、输入cmd指令完成注册4、把相关的dll放置到项目输出路径下&#xff0c;即可成功引用 二、批量注册dll1、…

photoshop cc 2018破解补丁(pscc2018注册机) 附使用方法

1、下载破解程序 破解文件自行到 http://www.ddooo.com/softdown/109954.htm 下载 博主可以到本博客的文件--》pscc2018zcj_109954.rar下载 2、破解 打开Amtemu.exe 第一个下拉框选择 adobe photoshop cc 2015 没错&#xff0c;就是2015 。。2015可以破解2018的 然后点击…