生成器

生成器是 Qbs 的一个子工具和一组 API,它允许对构建图进行任意处理。目前,它们用于将与主流 IDE(如 Microsoft Visual Studio)集成以及生成 Clang 编译数据库。

生成 Microsoft Visual Studio 项目

要为 Microsoft Visual Studio 等其他构建系统生成项目,请使用 qbs generate 命令,并使用 -g 选项指定生成器。例如

# For Visual Studio
qbs generate -g visualstudio2015

Qbs 将根据所选生成器在当前目录中生成一系列文件。最终的项目文件可以在相应的 IDE 中打开,并在此处执行所有操作。

项目文件将尽可能暴露给 IDE,并将使用 Qbs 执行实际构建。

注意: 您无法修改构建系统文件并期望更改在 Qbs 中得到反映。必须编辑您的 Qbs 项目文件,并重新运行 qbs generate 以使更改反映在您的 IDE 中。

生成 IAR Embedded Workbench 项目

要为 IAR Embedded Workbench 生成项目,请使用 qbs generate 命令并使用 -g 选项指定生成器。例如

# For IAREW v8xxxx
qbs generate -g iarew8 profile:<your/qbs/profile>
qbs generate -g iarew8 -d <path/to/build/directory> -f <path/to/qbs/project> profile:<your/qbs/profile>

注意: 您需要指定特定的 QBS 配置文件,这对于生成器获取目标架构以生成项目是必需的。

注意: IAR EW 生成器创建了一个本机目标项目。

以下列出支持的 IAR EW 生成器

生成器IAR EW 版本目标架构
iarew8所有 8.x.y 版本ARM
iarew7所有 7.x.y 版本AVR, MSP430
iarew10所有 10.x.y 版本8051(也称为 MCS51)
iarew3所有 3.x.y 版本STM8

KEIL uVision 项目

要为 KEIL uVision 生成项目,请使用 qbs generate 命令并使用 -g 选项指定生成器。例如

# For KEIL UV5
qbs generate -g keiluv5 profile:<your/qbs/profile>
qbs generate -g keiluv5 -d <path/to/build/directory> -f <path/to/qbs/project> profile:<your/qbs/profile>

注意: 您需要指定特定的 QBS 配置文件,这对于生成器获取目标架构以生成项目是必需的。

注意: KEIL UV 生成器创建了一个本机目标项目。

以下列出支持的 KEIL UV 生成器

生成器KEIL UV 版本目标架构
keiluv5所有 5.x.y 版本8051(也称为 MCS51),ARM

生成 Clang 编译数据库

要生成 Clang 编译数据库(clangdb),请使用以下命令

qbs generate --generator clangdb

生成 Makefile

要生成 Makefile,请使用以下命令

qbs generate --generator makefile

目标

生成的Makefile将包含所有Qbs已知输出工作物的目标。

此外,为每个产品还会创建以下目标

  • <product-name> 编译产品
  • clean-<product-name> 删除上述目标生成的所有文件
  • install-<product-name> 安装具有qbs.install设置的产品的工作物

在上面的列表中,占位符<product-name>代表产品的名称,其中所有非ASCII字母、数字、点或下划线的字符都将替换为下划线字符。

特别目标all 编译所有具有builtByDefault属性启用的产品。这是默认目标。它由installclean补充。

注意:Makefile无法构建由JavaScriptCommands创建的工作物,因为无法为它们运行命令行。

预定义变量

构建目录和安装根目录设置为在调用生成器时指定的内容。如果未指定任何内容,则使用Qbs的默认值。可以通过显式设置BUILD_ROOTINSTALL_ROOT变量来覆盖这些值,例如

$ qbs generate -g makefile config:make modules.qbs.installRoot:/opt/mydir
$ make -f make/Makefile                                 # Will install to /opt/mydir
$ make -f make/Makefile INSTALL_ROOT=/opt/myotherdir    # Will install to /opt/myotherdir

目录名称中的空格

由于正确实现这一功能的困难,Qbs将拒绝生成Makefile,如果源、构建或安装根目录包含空格。尽管如此,它将尽力处理输出工作物的文件名中的空格。

格式在特定平台上的差异

Qbs假定Makefile将在当前宿主平台上调用,因此将使用该平台的相关工具来复制和删除文件,并且Windows上路径分隔符将被转换为反斜杠。在处理工作物名称中的空格时,在Unix-like系统上假定与GNU make的兼容性,并有关引号。

限制

由于Qbs项目格式和构建引擎的高度灵活性,某些项目可能过于复杂,无法为其他构建系统生成等效的项目文件。

此限制列表旨在尽可能小,但最显著的一个(至少对Microsoft Visual Studio生成器而言)是某些属性必须在所有构建配置中包含相同的值。例如,以下是不允许的

Product {
    // ERROR: 'name' property cannot have different values based on the configuration
    name: qbs.configuration === "debug"
        ? "MyProduct_debug"
        : "MyProduct"
}

注意:此限制仅适用于当属性值根据配置名称变化时。例如,以下是可以的(只要xyz本身在配置之间不变化)

Product {
    // OK
    property bool isDebug: <some value>
    name: isDebug ? "MyProduct_debug" : "MyProduct"
}

受限制的属性包括但不限于

如果在某些情况下可以找到一个简单的解决方案(例如,在配置中变Product.targetName而不是Product.name),生成器通常会在错误消息中建议它。

©2023 Qt公司有限公司。本体内的文档贡献是各自所有者的版权。提供的文档是根据免费软件基金会发布的GNU自由文档许可版1.3的条款许可的。Qt及其标志是芬兰以及全球其他国家的Qt公司有限公司的商标。所有其他商标均为其各自所有者的财产。