附录C:JSON API
此API是向IDE提供Qbs支持的推荐方式。它可以通过会话命令访问。
数据包格式
所有信息都是通过数据包交换的,这些数据包具有以下结构
packet = "qbsmsg:" <payload length> [<meta data>] <line feed> <payload>
首先是一个固定的字符串,用于标识数据包的开始,后面跟实际数据的字节数。之后,可能还有其他元数据。目前没有,但未来的扩展可能会添加一些。换行字符标记元数据部分的结尾,紧接着是负载,这是一个单个Base64编码的JSON对象。我们称此对象为消息。
消息
消息数据是UTF8编码的。
大多数消息要么是请求要么是响应。请求是通过会话的标准输入通道发送给Qbs的消息。响应是通过Qbs通过会话的标准输出通道发送的消息。每个响应始终对应一个特定的请求。每个请求(除退出请求外)都期望得到一个精确相应的响应。响应意味着请求的操作已经完成。至少,它包含有关操作是否成功的信息,并且通常包含针对相应请求的特定数据。
每个消息对象都有一个type
属性,它是一个唯一的字符串,用于标识消息类型。
所有请求都会阻塞会话,包括同类型的其他请求。例如,如果客户端代码希望使用不同的参数重新启动项目的构建,它首先必须发送一个取消请求,等待当前构建任务的响应,然后才能请求另一个构建。唯一可以在处理请求的同时合法发送的消息是退出消息。
响应对象可能携带一个error
属性,表示相应的操作已失败。如果没有此属性,则表示请求成功。error
属性的格式在此处描述。
在本页的剩余部分,我们将描述所有可以发送到和从Qbs接收的消息的结构。属性表可能有一个标题为强制的列,其值表明相应的消息属性是否始终存在。如果缺少此列,则相应消息的所有属性都是强制性的,除非另有说明。
hello
消息
此消息由Qbs在会话启动后精确发送一次。这是Qbs发出的唯一一个不是对请求的响应的消息。type属性的值是"hello"
,其他属性如下
属性 | 类型 |
---|---|
api-level | int |
api-compat-level | int |
当API扩展时,例如通过添加新的消息或属性,api-level
的值会增加。
在进行与当前API不兼容的更改时,会增加 api-compat-level
的值。一个为 API 级别 n
编写的工具应该拒绝与 API 兼容级别大于 n
的 Qbs 版本一起工作,因为它无法保证正确的行为。除非绝对必要,这个值不会改变。
api-compat-level
的值总是小于或等于 api-level
的值。
解析项目
要指示 Qbs 从磁盘加载项目,发送类型为 resolve-project
的请求。其他属性包括:
属性 | 类型 | 必需 |
---|---|---|
build-root | FilePath | yes |
configuration-name | string | no |
data-mode | DataMode | no |
deprecation-warning-mode | string | no |
dry-run | bool | no |
environment | Environment | no |
error-handling-mode | string | no |
fallback-provider-enabled | bool | no |
force-probe-execution | bool | no |
log-time | bool | no |
log-level | LogLevel | no |
max-job-count | int | no |
module-properties | 字符串列表 | no |
overridden-properties | object | no |
project-file-path | FilePath | 如果是从头解析 |
restore-behavior | string | no |
settings-directory | string | no |
top-level-profile | string | no |
wait-lock-build-graph | bool | no |
environment
属性定义了解析项目时以及随后的 Qbs 操作所需使用的环境。
error-handling-mode
指定了 Qbs 如何处理项目文件中存在的问题,例如分配未知属性。可能的值是 "strict"
和 "relaxed"
。在严格模式下,Qbs 将立即中止,并根据各种错误设置回复的 error
属性。在宽松模式下,如果可能的话,Qbs 将继续解析项目。对于遇到的每个错误都会发出一个警告消息,并且不会设置回复的 error
属性。默认错误处理模式是 "strict"
。
如果 log-time
属性为 true
,则 Qbs 将发出包含有关操作哪个部分花费了多长时间的信息的 日志数据 消息。
module-properties
属性列出了应包含在回复消息中发送的 产品数据 中的模块属性名称。例如,如果要解析的项目是基于 C++ 的,并且客户端代码对代码使用的 C++ 版本感兴趣,则 module-properties
将包含 "cpp.cxxLanguageVersion"
。
overridden-properties
属性用于覆盖模块、产品或项目属性的值。指定键的可能方法在此处描述。
《restore-behavior》属性指定是否以及如何使用现有的构建图。值 "restore-only"
表示应从磁盘加载构建图并直接使用。在此模式下,如果构建图文件不存在,则为错误。值 "resolve-only"
表示应从头开始解析项目,并忽略现有的构建图。在此模式下,如果不存在 "project-file-path"
属性,则为错误。默认值是 "restore-and-track-changes"
,如果可能,则使用现有的构建图,并且如果没有找到构建图或参数与项目上次解析时使用的参数不同,则重新解析项目。
《top-level-profile》属性指定用于解析项目的 Qbs 配置文件。它对应于使用 resolve 命令时的 profile
键。
所有其他属性对应于 resolve 命令的命令行选项,它们的语义在文档中已描述。
当项目被解析后,Qbs 将回复一个 project-resolved
消息。可能的属性包括:
属性 | 类型 | 必需 |
---|---|---|
error | ErrorInfo | no |
project-data | TopLevelProjectData | no |
当操作失败时,存在 error-info
属性。当请求的 data-mode
属性所述的条件得到满足时,存在 project-data
属性。
所有其他与项目相关的请求都需要一个已解析的项目来操作。如果没有,它们将失败。
每个会话最多只有一个解析过的项目。如果客户端代码想要打开多个项目或以不同的配置打开一个项目,它需要启动额外的会话。
构建项目
要构建项目,发送一个类型为 build-project
的请求。以下列出其他属性,它们都不是必需的:
属性 | 类型 |
---|---|
active-file-tags | 字符串列表 |
changed-files | FilePath 列表 |
check-outputs | bool |
check-timestamps | bool |
clean-install-root | bool |
data-mode | DataMode |
dry-run | bool |
command-echo-mode | string |
enforce-project-job-limits | bool |
files-to-consider | FilePath 列表 |
install | bool |
job-limits | 对象列表 |
keep-going | bool |
log-level | LogLevel |
log-time | bool |
max-job-count | int |
module-properties | 字符串列表 |
products | 字符串列表或 "all" |
除了 install
以外的所有布尔属性默认为 false
。
《active-file-tags》和《files-to-consider》用于将构建限制在某些输出标签和/或源文件。例如,如果只构建 C/C++ 对象文件,则《active-file-tags》应设为 "obj"
。
《job-limits》数组中的对象包含一个字符串属性 pool
和一个整型属性 limit
。
如果 log-time
属性为 true
,则 Qbs 将发出包含有关操作哪个部分花费了多长时间的信息的 日志数据 消息。
如果《products》是一个数组,则它的元素必须对应于先前检索到的 ProductData 的 full-display-name
属性,并且只会构建这些产品。如果《products》是字符串 "all"
,则构建项目中的所有产品。如果《products》不存在,则跳过其《builtByDefault》属性为 false
的产品。
《module-properties》属性的含义与 resolve-project 请求中相同。
所有其他属性对应于 build 命令的选项。
构建完成后,Qbs 将回复一个 project-built
消息。可能的属性包括:
属性 | 类型 | 必需 |
---|---|---|
error | ErrorInfo | no |
project-data | TopLevelProjectData | no |
当操作失败时,存在 error-info
属性。当请求的 data-mode
属性所述的条件得到满足时,存在 project-data
属性。
除非 command-echo-mode
值为 "silent"
,否则将为要执行的每个命令发出类型为 command-description
的消息。它包含两个字符串属性 highlight
和 message
,其中 message
是要向用户展示的消息,而 highlight
是关于如何显示消息的提示。它与同名属性 Command 相对应。
对于已完成的进程命令,可能会发出类型为 process-result
的消息。其他属性包括
error
字符串是以下之一:"failed-to-start"
、"crashed"
、"timed-out"
、"write-error"
、"read-error"
和 "unknown-error"
。除非 success
为 false
,否则其值没有意义。
stdout
和 stderr
属性分别描述进程的标准输出和标准错误输出,分割成行。
如果进程在无错误且退出代码为零的情况下完成,则 success
属性为 true
。
其他属性描述了实际执行的精确命令。
只有在进程失败或向其中一个输出通道打印数据的情况下,才会发出此消息。
清理项目
要删除项目的构建工件,发送类型为 clean-project
的请求。其他属性包括
属性 | 类型 |
---|---|
dry-run | bool |
keep-going | bool |
log-level | LogLevel |
log-time | bool |
products | 字符串列表 |
products
数组的元素对应于 ProductData 的 full-display-name
。如果此属性存在,则仅删除相应产品的工件。
如果 log-time
属性为 true
,则 Qbs 将发出包含有关操作哪个部分花费了多长时间的信息的 日志数据 消息。
所有其他属性对应于 clean 命令的选项。
这些属性中没有任何一个是强制性的。
删除所有工件后,Qbs 返回一个 project-cleaned
消息。如果操作成功,则此消息没有任何属性。否则,类型为 ErrorInfo 的属性 error
指示出了什么问题。
安装项目
安装通常是 build 过程的一部分。要在单独的步骤中进行,在构建时将 install
属性设置为 false
,并发送专用 install-project
消息。其他属性包括
属性 | 类型 |
---|---|
clean-install-root | bool |
dry-run | bool |
install-root | FilePath |
keep-going | bool |
log-level | LogLevel |
log-time | bool |
products | 字符串列表 |
use-sysroot | bool |
products
数组的元素对应于 ProductData 的 full-display-name
。如果此属性存在,则仅安装相应产品的工件。
如果 log-time
属性为 true
,则 Qbs 将发出包含有关操作哪个部分花费了多长时间的信息的 日志数据 消息。
如果 use-sysroot
属性为 true
且 install-root
不存在,则安装根将为 qbs.sysroot。
所有其他属性对应于 install 命令的选项。
这些属性中没有任何一个是强制性的。
取消操作
可以使用 cancel-job
请求中止可能运行时间较长的操作。此消息没有任何属性。没有专用的回复消息;相反,将发送与当前运行的操作关联的通常回复,并将 error
属性设置为指示已取消。
如果没有正在进行中的操作,此请求将没有任何效果。特别是,如果它在其应该取消的操作已经完成后到达(即存在竞争条件),客户端代码收到的回复将不包含与取消相关的错误。
添加和删除源文件
可以使用add-files
和remove-files
消息分别将源文件添加到和从Qbs项目文件中删除。这两个请求具有相同的属性集
属性 | 类型 |
---|---|
files | FilePath 列表 |
group | string |
product | string |
files
属性指定应添加或删除哪些文件。
product
属性对应于ProductData的full-display-name
,并指定将操作应用于哪个产品。
group
属性对应于GroupData的name
,并指定将操作应用于产品中的哪个组。
操作完成后,Qbs将分别回复files-added
和files-removed
消息。同样,属性是相同的
如果存在error
属性,则操作至少部分失败,并且failed-files
将列出无法添加或删除的文件。
get-run-environment
消息
此请求检索特定可执行产品的完整运行环境,同时考虑产品引入的所有模块的setupRunEnvironment
脚本。属性如下
属性 | 类型 | 必需 |
---|---|---|
base-environment | Environment | no |
config | 字符串列表 | no |
product | string | yes |
base-environment
属性定义了应将Qbs特定值合并的环境中。
config
属性对应于run
命令的--setup-run-env-config
选项。
product
属性指定要检索环境的产物。值必须与项目中的某个ProductData
的full-display-name
相对应。
Qbs将回复run-environment
消息。在失败的情况下,它将包含一个类型为ErrorInfo的属性error
,否则它将包含类型为Environment的属性full-environment
。
get-generated-files-for-sources
消息
此请求允许客户端代码检索有关从给定源文件生成哪些工件的信息。它的唯一属性是一个列表products
,其元素是具有以下两个属性的表示对象
full-display-name和
requests。前者标识应用请求的产品,它必须与项目中
ProductData
的相同名称的属性匹配。后者是一个具有以下属性的表示对象列表
属性 | 类型 | 必需 |
---|---|---|
source-file | FilePath | yes |
tags | 字符串列表 | no |
recursive | bool | no |
source-file
属性指定产品中的源文件。
tags
属性限制了要匹配的生成文件的潜在文件标签。这在源文件作为多个规则或规则生成多种类型输出之一输入时相关。
如果 recursive
属性设置为 true
,则也将返回从源文件间接生成的文件。默认值为 false
。例如,如果此属性用于 C++ 源文件,除了对象文件,最终的链接目标(例如库或可执行应用程序)也将返回。
Qbs 会回复一个 generated-files-for-sources
消息,其结构与请求类似。它还有一个名为 products
的对象列表属性,其元素由一个 full-display-name
字符串属性和一个 results
对象列表属性组成。这些对象的属性是
source-file
属性对应于请求中同名的条目,而 generated-files
是由 Qbs 规则生成的文件,这些规则以源文件为输入,并考虑了请求中指定的约束。
如果列表为空则不会列出。类似地,若 results
列表为空的产品也将被省略。
注意:如果项目未完全构建,结果可能不完整。
关闭项目
项目通过 release-project
消息关闭。此请求没有属性。
Qbs 会回复一个 project-released
消息。如果未打开任何项目,则回复将包含一个类型为 ErrorInfo 的 error
属性。
关闭会话
要关闭会话,请发送一个 quit
消息。此请求没有属性。
Qbs 会取消所有当前正在进行的操作,然后关闭自己。不会发送回复。
进度消息
当处理请求时,Qbs 可能会发出进度信息,以便客户端代码可以显示进度条。
task-started
消息
这是特定请求的第一个进度消息。它最多出现一次。它包含一个字符串属性 description
,其值可以显示给用户,还有一个整数属性 max-progress
,用于指示哪个进度值对应于 100%。
task-progress
消息
此消息通过一个整数属性 progress
更新进度。
new-max-progress
消息
如果需要更正原始估计的最大进度,则会发出此消息。其整数属性 max-progress
更新先前 task-started 消息中的值。
用户信息消息
有两种类型的消息纯粹包含要呈现给用户的信息。
log-data
消息
此对象有一个字符串属性 message
,它是要向用户显示的文本。
warning
消息
此消息有一个类型为 ErrorInfo 的 warning
属性。
协议错误消息protocol-error
Qbs会将该消息作为对未知type
请求的响应。它包含一个类型为ErrorInfo的error
属性。
项目数据
如果请求可以更改构建图数据,相关响应可能包含一个值类型为TopLevelProjectData的project-data
属性。
TopLevelProjectData
此数据类型表示整个项目。它具有与PlainProjectData相同的属性。如果它是project-resolved
消息的一部分,也包含这些附加属性。
build-directory
的值是顶级构建目录。
build-graph-file-path
的值是构建图文件的路径。
build-system-files
的值包含所有Qbs项目文件,包括模块和JavaScript助手文件。
overridden-properties
的值是在项目上一次解析时传递的。
profile-data
属性将项目中使用的配置文件名称映射到相应的属性映射。除非使用配置文件多路复用,否则此对象将正好包含一个属性。
PlainProjectData
此数据类型描述了一个项目项。属性如下
属性 | 类型 |
---|---|
是否启用 | bool |
位置 | FilePath |
名称 | string |
products | 产品数据列表 |
子项目 | PlainProjectData列表 |
is-enabled
属性对应于项目的条件。
location
属性是相应的项目项在Qbs项目文件中的确切位置。
products
和sub-projects
是项目通过其引用属性拉取的内容。
ProductData
此数据类型描述了一个产品项。属性如下
属性 | 类型 |
---|---|
构建目录 | FilePath |
依赖项 | 字符串列表 |
完整显示名称 | string |
生成的工件 | 工件数据列表 |
组 | 组数据列表 |
是否启用 | bool |
是否多路复用 | bool |
是否可运行 | bool |
位置 | 位置 |
module-properties | 模块属性数据 |
多路复用配置ID | string |
名称 | string |
属性 | object |
目标可执行文件 | FilePath |
目标名称 | string |
类型 | 字符串列表 |
版本 | string |
dependencies
数组元素对应于通过Depends项拉入的产品product-data的完整显示名称属性。
generated-artifacts
是由该产品中的rules创建的文件。
groups
列表对应于该产品中的group项。此外,为产品本身的files属性创建一个“伪组”。其名称与产品相同。
is-enabled
属性对应于产品的条件。如果产品包含错误,并且Qbs在项目解析时被告知要以宽松模式运行,则产品也可能被禁用。
is-multiplexed
属性为 true,当且仅当产品在一个或多个属性上 复用。
is-runnable
属性指示产品的一个目标工件是否是可执行文件。在这种情况下,文件可通过 target-executable
属性访问。
location
属性是 Qbs 项目文件中对应 Product 项定义的确切位置。
module-properties
对象提供了当项目 解析 时请求的模块属性值。
name
属性是在 Product 项 中给出的值,而 full-display-name
是在整个项目(即使在复用的情况下)中唯一标识产品的名称。在没有复用的情况下,它与 name
相同。在两种情况下,它都适用于向用户展示。
请参阅 Product 项文档以获取其他属性的描述。
GroupData
此数据类型描述了一个 Group 项。属性包括
属性 | 类型 |
---|---|
是否启用 | bool |
位置 | 位置 |
module-properties | 模块属性数据 |
名称 | string |
prefix | string |
source-artifacts | 工件数据列表 |
source-artifacts-from-wildcards | 工件数据列表 |
is-enabled
属性对应于组的 条件。然而,如果组的 产品被禁用,则此属性始终为 false
。
location
属性是 Qbs 项目文件中对应的 Group 项出现的确切位置。
module-properties
对象提供了当项目 解析 时请求的模块属性值。如果没有在组级设置模块属性且其值与组的产品的值相同,则此属性被省略。
source-artifacts
列表对应于组 files 属性中列出的文件。
source-artifacts-from-wildcards
列表表示从组 files 属性中的通配符条目扩展的文件。
请参阅 Group 项文档以获取其他属性的描述。
ArtifactData
此数据类型代表项目中的文件,无论作为源还是作为规则的输出。另一方面,Qbs 项目文件不是工件。属性包括
属性 | 类型 |
---|---|
file-path | FilePath |
file-tags | 字符串列表 |
install-data | object |
is-executable | bool |
is-generated | bool |
is-target | bool |
module-properties | 模块属性数据 |
install-data
属性是一个对象,其 is-installable
属性指示工件是否可安装。如果是这样,那么 FilePath 属性 install-file-path
和 install-root
提供进一步信息。
is-target
属性为 true,如果工件是该产品的目标工件,即 is-generated
为 true 且 file-tags
与 产品类型 相交。
module-properties
对象提供了当项目 解析 时请求的模块属性值。此属性仅对生成的工件存在。对于源工件,可以从它们的 group 中检索值。
其他属性应该很容易理解。
模块属性数据
此数据类型将完全限定的模块属性名称映射到它们相应的值。
其他自定义数据类型
存在多种自定义数据类型,这些类型是各种消息的构建块。以下是它们的描述。
FilePath
FilePath 是描述文件或目录的字符串。FilePath 总是绝对路径,并在路径分隔符中使用正斜杠,无论目标操作系统如何。
Location
Location 是一个表示文件路径以及在相应文件中的位置的(可选)位置的对象。它由以下属性组成
属性 | 类型 | 必需 |
---|---|---|
file-path | FilePath | yes |
line | int | no |
column | int | no |
ErrorInfo
ErrorInfo 是一个表示错误信息的对象。它的唯一属性 items
是具有以下结构的对象数组
属性 | 类型 | 必需 |
---|---|---|
description | string | yes |
位置 | 位置 | no |
DataMode
这是 resolve 或 build 请求中 data-mode
属性的类型。它用于指示在哪些情况下回复消息应包括项目数据。可能值具有字符串类型,如下所示
"never"
:不要将项目数据附加到回复。"always"
:应将项目数据附加到回复。"only-if-changed"
:只有在与当前项目数据不同时才将项目数据附加到回复。
默认值是 "never"
。
LogLevel
这是各种请求中可能出现的 log-level
属性类型。它用于指示客户端是否希望接收到 log-data 和/或 warning 消息。可能值具有字符串类型,如下所示
- "error":不要记录任何内容。
- "warning":Qbs 可能会发出 警告,但不会发出 log-data 消息。
- "info":除了警告外,Qbs 还可能发出信息 log-data 消息。
- "debug":Qbs 可能会发出调试输出。不会生成消息;相反,将使用标准错误输出通道。
默认值是 "info"
。
Environment
此数据类型描述一组环境变量。它是一个对象,其键是环境变量的名称,其值是这些环境变量的值。
©2023 Qt 公司有限公司。本文件内包含的文档贡献是各自所有者的版权。所提供的文档是根据自由软件基金会发布的 GNU 自由文档许可证 1.3 版本 的条款许可的。Qt 及其标志是芬兰及其它全球国家的 Qt 公司的商标。所有其他商标都是其所有者的财产。