生成器
生成器是 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属性启用的产品。这是默认目标。它由install
和clean
补充。
注意:Makefile无法构建由JavaScriptCommands创建的工作物,因为无法为它们运行命令行。
预定义变量
构建目录和安装根目录设置为在调用生成器时指定的内容。如果未指定任何内容,则使用Qbs的默认值。可以通过显式设置BUILD_ROOT
和INSTALL_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公司有限公司的商标。所有其他商标均为其各自所有者的财产。