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 如何构建项目:
import qbs.FileInfo导入所需的文件信息
QtApplication是应用的配置
Depends { name: "Qt.widgets" }用来引入功能模块
cpp.defines:[]程序的一些宏定义
files:[]项目程序需要用到的一些文件
install: true 是否安装某组文件
installDir: qbs.targetOS.contains("qnx") ? FileInfo.joinPaths("/tmp", name, "bin") : base 设置安装目录
qbs Property Documentation
-
architecture : string
目标平台的处理器体系结构。
未定义表示目标平台独立于体系结构(例如clr或jvm),此属性通常在配置文件中设置。
常用值为:“x86”、“x86_64”和“arm”,默认:未定义。 -
architectures : stringList
产品将为其构建的体系结构。
默认值:Android上是[armv5te],与苹果平台上的xcode相同,否则等同于[qbs.architecture]。 -
buildVariant : string
构建模式的名称。
可能的值是“debug”和“release”。如果 qbs.configurationname 为“release”,则默认为“release”,否则为“debug”。 -
buildVariants : stringList
构建模式的名称列表。
默认值:相当于[qbs.buildvariant]。 -
debugInformation : bool
是否生成调试信息。
默认值:对于调试版本为true,否则为false。 -
enableDebugCode : bool
是否在产品中启用调试功能。不要与生成调试符号或代码优化级别混淆。
通常,此属性对 debug 启用,对 release 禁用。
默认值:对于调试版本为true,否则为false。 -
hostOS : stringList
此属性由QBS内部设置,并指定OS QBS正在运行。
此属性的可能值是TargetOS的值,即使其中某些值可能不受支持,默认:未定义。 -
hostPlatform : string
主机平台,注:不要使用此属性。
默认:自动确定。 -
install : bool
是否安装某组文件。
此属性通常设置在组项中,以将多个文件标记为可安装。
注意:启用此属性的项目将自动接收文件标记“installable”。这对于编写与包装相关的规则很有用,默认值:false -
installDir : string
产品或组文件的安装目录。
此属性的值是相对于InstallPrefix的路径,默认:未定义 -
installPrefix : string
全局安装前缀。它隐式地预加在installdir的所有值之前。
此属性本身的值在安装上下文中相对于InstallRoot,默认:[] -
installRoot : string
全局安装根目录。
在安装上下文中,它隐式地预加了installPrefix的所有值。
注意:此属性与InstallDir和InstallPrefix有根本不同,因为它对正在构建的代码不可见。实际上,install根目录通常只是用于打包二进制文件的临时位置,因此不应假定它们在运行时位于该位置。出于同样的原因,通常不从项目文件中设置此属性。默认值:/install-root -
installSourceBase : string
要安装的本地文件的基目录。
从installdir中指定的目标目录路径中省略源基目录。
默认:要安装的当前文件的目录,相对于产品的源目录。 -
nullDevice : string
与空设备对应的平台特定文件路径。
默认值:在Windows上为“nul”,在Unix上为/dev/null。 -
optimization : string
所有工具链都应执行的一般优化类型。
允许值为:
“fast”
“none”
“small”
默认值:调试版本为“none”,发布版本为“fast”。 -
pathListSeparator : string
环境变量或其他上下文中使用的路径列表的平台特定分隔符。
在Windows上默认为“;”,在Unix上默认为“:”。 -
profiles : stringList
构建产品的配置文件。
对于这里列出的每个概要文件,将根据各自概要文件中设置的属性构建一个产品实例。
默认值:[project.profile] -
shellPath : path
与命令行解释器对应的平台特定文件路径。
在Windows上,这是保存在comspec环境变量(通常是c:/windows/system32/cmd.exe)中的cmd.exe的路径,在类Unix平台上,这是/bin/sh。
默认值:Windows上"%COMSPEC%",Unix上“bin/sh” -
sysroot : string
目标平台的sysroot。
此属性通常设置在用于交叉编译的配置文件中。默认:未定义 -
targetOS : stringList
指定要为其生成项目的操作系统。
使用此属性在条件中测试特定OS或OS系列。请勿为此目的使用TargetPlatform。
可能的值包括“bsd”、“darwin”和“unix”中的一个或多个,以及targetform的可能值。
默认:未定义 -
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"
-
toolchain : stringList
工具链的属性用于构建。
典型值包括“llvm”,以及toolchaintype的可能值。默认:未定义 -
toolchainType : string
工具链用于构建。
通常应将此属性视为只写,并避免使用它来测试当前的工具链。
典型值包括:“gcc”、“clang”、“mingw”、“msvc”和“xcode”。
默认:自动确定。 -
[read-only] configurationName : string
当前生成配置的名称。
构建配置是通过命令行参数config设置的。默认:“default” -
[read-only] hostOSBuildVersion : string
主机操作系统的内部版本。
目前,仅为Windows和Apple平台定义,默认:未定义
在Windows上,这是4位或5位Windows内部版本号,相当于versionPatch。
在苹果平台上,这是苹果版本控制方案中的标准版本号。例如,“13C64”。 -
[read-only] hostOSVersion : string
主机操作系统版本。
目前,仅为Windows和Apple平台定义, 默认:未定义
由两个或三个由点分隔的数字组成。例如,“10.9”或“6.3.9600”。 -
[read-only] hostOSVersionParts : list
主机操作系统版本列表。
例如,Windows8.1(版本6.3.9600)对应的值为[6,3,9600],默认:[] -
[read-only] hostOSVersionMajor : int
主机操作系统主版本。
默认值:hostoVersionParts[0] -
[read-only] hostOSVersionMinor : int
主机操作系统次版本。
默认值:hostosVersionParts[1] -
[read-only] hostOSVersionPatch : int
主机操作系统修补程序级别。
默认值:hostosVersionParts[2] -
[read-only] version : string
QBS版本号。例如,“1.4.1”。 -
[read-only] versionMajor : int
QBS的主要版本号。 -
[read-only] versionMinor : int
QBS的次要版本号。 -
[read-only] versionPatch : int
QBS的补丁版本号。
Group QML Type
-
condition : bool
确定组中的文件是否实际视为项目的一部分。默认值:true -
excludeFiles : list
从文件列表中减去的文件列表。使用通配符时很有用。默认:一个空的列表 -
fileTags : list
要附加到组文件的文件标记列表。然后可以用一个规则来匹配它们。
注意:文件标记器从不应用于设置了此属性的文件。默认:一个空的列表 -
fileTagsFilter : list
要匹配的artifact.filetags列表。
此组中设置的任何属性都将应用于产品的工件,其文件标记与此处列出的标记匹配。
组的file tags属性指定的文件标记将添加到匹配的项目中。此属性与文件互斥。
默认:一个空的列表 -
files : list
组中的文件。与FileTagsFilter互斥。
使用包含组项的文件的父目录解析相对路径。但是,如果prefix属性设置为绝对路径,则该路径将成为基目录。默认:一个空的列表 -
filesAreTargets : bool
如果此属性为true且组位于模块中,则组中的文件将不会成为依赖于模块的产品的源工件。相反,它们被视为产品的目标工件。也就是说,它们将与依赖模块的产品中的规则的inputsFromDependencies文件标记列表相匹配。默认值:false -
name : string
组的名称。不在内部使用;主要用于IDE。
默认值:“Group x”,其中x是产品中所有组中的唯一数字。 -
overrideTags : bool
确定如何处理同时在产品(或父组,如果有)和组的顶级列出的文件上的标记。
如果此属性为真,则通过组设置的文件标记将替换通过产品或父组设置的标记。如果为假,则将组标记添加到父标记中。如果设置了FileTagsFilter,则忽略此属性。默认值:true -
prefix : string
用于预处理所有文件的字符串。允许斜杠并具有目录语义。
默认值:父组的前缀(如果存在),否则为空。