cmake-file-api(7)¶
简介¶
CMake 提供了一个基于文件的 API,客户端可以使用它来获取 CMake 生成的构建系统的语义信息。客户端可以通过在构建树中的特定位置写入查询文件来使用该 API,以请求零个或多个对象种类。当 CMake 在该构建树中生成构建系统时,它会读取查询文件并为客户端写入回复文件以供读取。
该基于文件的 API 使用构建树顶部的 <build>/.cmake/api/ 目录。API 具有版本控制,以支持 API 目录内文件布局的更改。API 文件布局的版本控制与回复中使用的对象种类的版本控制是正交的。此版本的 CMake 仅支持一个 API 版本,即 API v1。
3.27 版本新增: 项目还可以使用 cmake_file_api() 命令提交当前运行的查询。
API v1¶
API v1 位于 <build>/.cmake/api/v1/ 目录中。它包含以下子目录
query/保存客户端写入的查询文件。这些可以是 v1 共享无状态查询文件、v1 客户端无状态查询文件 或 v1 客户端有状态查询文件。
reply/保存 CMake 在运行生成构建系统时写入的回复文件。客户端仅在被回复索引引用时才可以读取回复文件。
index-*.jsonCMake 生成构建系统时写入的 v1 回复索引文件。
error-*.json在 4.1 版本中新增。
当 CMake 因错误而未能生成构建系统时写入的 v1 回复错误索引。
客户端可以随时查找并读取回复索引。客户端可以选择在任何时候创建
reply/目录,并监视新回复索引的出现。CMake 拥有所有回复文件。客户端绝不能删除它们。
3.31 版本新增: 用户可以将查询文件添加到 CMAKE_CONFIG_DIR 下的 api/v1/query 中,以创建适用于所有 CMake 项目的用户级查询。
v1 客户端无状态查询文件¶
客户端无状态查询文件允许客户端为对象种类的主要版本创建自有请求,并获取运行的 CMake 所识别的所有已请求版本。
客户端可以通过在特定于客户端的查询子目录中创建空文件来创建自有请求。其格式为
<build>/.cmake/api/v1/query/client-<client>/<kind>-v<major>
其中 client- 是字面量,<client> 是唯一标识客户端的字符串,<kind> 是对象种类之一,-v 是字面量,<major> 是主要版本号。每个客户端必须通过自己的方式选择唯一的 <client> 标识符。
这种形式的文件是由客户端 <client> 拥有的无状态查询。所属客户端可以随时删除它们。
v1 客户端有状态查询文件¶
有状态查询文件允许客户端请求每种对象种类的版本列表,并仅获取运行的 CMake 所识别的最新版本。
客户端可以通过在特定于客户端的查询子目录中创建 query.json 文件来创建自有有状态查询。其格式为
<build>/.cmake/api/v1/query/client-<client>/query.json
其中 client- 是字面量,<client> 是唯一标识客户端的字符串,query.json 是字面量。每个客户端必须通过自己的方式选择唯一的 <client> 标识符。
query.json 文件是由客户端 <client> 拥有的有状态查询。所属客户端可以随时更新或删除它们。当给定的客户端安装更新时,它随后可以更新其写入构建树的有状态查询,以请求更新的对象版本。这可用于避免要求 CMake 不必要地生成多个对象版本。
4.1 版本新增: query.json 文件通过 此 JSON 模式 以机器可读的形式描述。
query.json 文件必须包含一个 JSON 对象
{
"requests": [
{ "kind": "<kind>" , "version": 1 },
{ "kind": "<kind>" , "version": { "major": 1, "minor": 2 } },
{ "kind": "<kind>" , "version": [2, 1] },
{ "kind": "<kind>" , "version": [2, { "major": 1, "minor": 2 }] },
{ "kind": "<kind>" , "version": 1, "client": {} },
{ "kind": "..." }
],
"client": {}
}
成员是
requests包含零个或多个请求的 JSON 数组。每个请求都是一个包含以下成员的 JSON 对象:
种类指定要包含在回复中的对象种类之一。
版本指示客户端理解的对象种类的版本。版本具有遵循语义版本惯例的主要和次要部分。该值必须是:
指定(非负)主要版本号的 JSON 整数,或
包含
major和(可选)minor成员的 JSON 对象,指定非负整数版本组件,或一个 JSON 数组,其元素均为上述类型之一。
client预留给客户端使用的可选成员。此值保留在为客户端写入的 v1 回复索引文件中,但除此之外会被忽略。客户端可以使用它来将自定义信息通过请求传递到其回复中。
对于每个请求的对象种类,CMake 将在请求中列出的版本中选择它所识别的第一个版本。响应将使用所选的主要版本以及运行的 CMake 为该主要版本所知的最高次要版本。因此,客户端应按优先顺序列出所有受支持的主要版本,并附带每个主要版本所需的最小次要版本。
client预留给客户端使用的可选成员。此值保留在为客户端写入的 v1 回复索引文件中,但除此之外会被忽略。客户端可以使用它来将自定义信息通过查询传递到其回复中。
其他 query.json 顶层成员保留供将来使用。如果存在,它们将被忽略以保持前向兼容性。
v1 回复索引文件¶
当 CMake 成功生成构建系统时,它会向 v1/reply/ 目录写入一个 index-*.json 文件。客户端必须首先读取回复索引文件,并且仅在遵循引用后才能读取其他 v1 回复文件。回复索引文件名的格式为
<build>/.cmake/api/v1/reply/index-<unspecified>.json
其中 index- 是字面量,<unspecified> 是由 CMake 选择的未指定名称。每当生成新的索引文件时,它都会被赋予一个新名称,旧的名称会被删除。在这些步骤之间的短时间内,可能存在多个索引文件;按字典顺序名称最大的那个是当前索引文件。
4.1 版本新增: 回复索引文件通过 此 JSON 模式 以机器可读的形式描述。
回复索引文件包含一个 JSON 对象
{
"cmake": {
"version": {
"major": 3, "minor": 14, "patch": 0, "suffix": "",
"string": "3.14.0", "isDirty": false
},
"paths": {
"cmake": "/prefix/bin/cmake",
"ctest": "/prefix/bin/ctest",
"cpack": "/prefix/bin/cpack",
"root": "/prefix/share/cmake-3.14"
},
"generator": {
"multiConfig": false,
"name": "Unix Makefiles"
}
},
"objects": [
{ "kind": "<kind>",
"version": { "major": 1, "minor": 0 },
"jsonFile": "<file>" },
{ "...": "..." }
],
"reply": {
"<kind>-v<major>": { "kind": "<kind>",
"version": { "major": 1, "minor": 0 },
"jsonFile": "<file>" },
"<unknown>": { "error": "unknown query file" },
"...": {},
"client-<client>": {
"<kind>-v<major>": { "kind": "<kind>",
"version": { "major": 1, "minor": 0 },
"jsonFile": "<file>" },
"<unknown>": { "error": "unknown query file" },
"...": {},
"query.json": {
"requests": [ {}, {}, {} ],
"responses": [
{ "kind": "<kind>",
"version": { "major": 1, "minor": 0 },
"jsonFile": "<file>" },
{ "error": "unknown query file" },
{ "...": {} }
],
"client": {}
}
}
}
}
成员是
cmake一个 JSON 对象,包含有关生成该回复的 CMake 实例的信息。它包含以下成员
版本指定 CMake 版本的 JSON 对象,包含以下成员
major,minor,patch指定主要、次要和补丁版本组件的整数值。
suffix指定版本后缀的字符串(如果有),例如
g0abc3。string指定完整版本的字符串,格式为
<major>.<minor>.<patch>[-<suffix>]。isDirty布尔值,指示版本是否是从具有本地修改的受版本控制的源树构建的。
paths一个 JSON 对象,指定随 CMake 附带的内容的路径。它具有 cmake、ctest 和 cpack 的成员,其值是指定每个工具绝对路径的 JSON 字符串(用正斜杠表示)。它还有一个
root成员,用于指定包含 CMake 资源(如Modules/目录)的目录的绝对路径(参见CMAKE_ROOT)。generator描述用于构建的 CMake 生成器的 JSON 对象。它具有以下成员
multiConfig指定生成器是否支持多种输出配置的布尔值。
名称指定生成器名称的字符串。
platform如果生成器支持
CMAKE_GENERATOR_PLATFORM,则这是一个指定生成器平台名称的字符串。
objectsreply一个 JSON 对象,反映了 CMake 为生成回复而加载的
query/目录的内容。成员的格式为<kind>-v<major>对于每个 CMake 识别为请求对象种类
<kind>且主要版本为<major>的 v1 共享无状态查询文件,都会出现此格式的成员。其值是<unknown>对于每个 CMake 未识别的 v1 共享无状态查询文件,都会出现此格式的成员。其值是一个包含单个
error成员的 JSON 对象,其中包含指示查询文件未知的错误消息字符串。client-<client>对于每个持有 v1 客户端无状态查询文件的客户端自有目录,都会出现此格式的成员。其值是一个反映
query/client-<client>/目录内容的 JSON 对象。成员的格式为<kind>-v<major>对于每个 CMake 识别为请求对象种类
<kind>且主要版本为<major>的 v1 客户端无状态查询文件,都会出现此格式的成员。其值是<unknown>对于每个 CMake 未识别的 v1 客户端无状态查询文件,都会出现此格式的成员。其值是一个包含单个
error成员的 JSON 对象,其中包含指示查询文件未知的错误消息字符串。query.json此成员出现在使用 v1 客户端有状态查询文件的客户端中。如果
query.json文件读取或解析为 JSON 对象失败,此成员是一个包含单个error成员的 JSON 对象,其中包含错误消息字符串。否则,此成员是一个反映query.json文件内容的 JSON 对象。成员包括client如果存在,则为
query.json文件client成员的副本。requests如果存在,则为
query.json文件requests成员的副本。responses如果
query.json文件的requests成员缺失或无效,此成员是一个包含单个error成员的 JSON 对象,其中包含错误消息字符串。否则,此成员包含一个 JSON 数组,其中包含requests数组中每个条目的响应(顺序相同)。每个响应是对所请求的对象种类和所选版本的相应回复文件的 v1 回复文件引用,或者
一个包含单个
error成员的 JSON 对象,其中包含带有错误消息的字符串。
阅读回复索引文件后,客户端可以阅读它所引用的其他 v1 回复文件。
v1 回复文件引用¶
回复索引文件使用带有以下成员的 JSON 对象来表示对另一个回复文件的每个引用
种类指定对象种类之一的字符串。
版本一个带有
major和minor成员的 JSON 对象,指定对象种类的整数版本组件。jsonFile一个 JSON 字符串,指定相对于回复索引文件到包含该对象的另一个 JSON 文件的路径。
v1 回复错误索引¶
在 4.1 版本中新增。
当 CMake 未能生成构建系统时,它会向 v1/reply/ 目录写入一个 error-*.json 文件。此回复错误索引遵循 v1 回复索引文件的命名模式、语法和语义,但有以下例外:
index-前缀被error-前缀替换。当生成新的错误索引时,旧的索引文件不会被删除。如果存在 v1 回复索引文件,它会索引最近一次成功运行的回复。如果存在多个
index-*.json和/或error-*.json文件,则按字典顺序名称最大的那个(排除index-或error-前缀)是当前索引。仅提供对象种类的子集
- configureLog
在 4.1 版本中新增。
其他对象种类的索引条目包含
error消息,而不是 v1 回复文件引用。
v1 回复文件¶
包含特定对象种类的回复文件由 CMake 写入。这些文件的名称未指定,客户端不得解释。客户端必须首先阅读 v1 回复索引文件并按照引用指向所需的响应对象名称。
回复文件(包括索引文件)绝不会被同名但内容不同的文件所替换。这允许客户端与正在运行的可能生成新回复的 CMake 并发地读取这些文件。但是,在生成新回复后,CMake 将尝试从之前的运行中删除它未刚写入的回复文件。如果客户端尝试读取索引引用的回复文件但发现文件缺失,这意味着并发的 CMake 已经生成了新回复。客户端可以简单地通过阅读新的回复索引文件重新开始。
对象种类¶
CMake 基于文件的 API 使用以下类型的 JSON 对象报告有关构建系统的语义信息。每种对象都使用具有主要和次要组件的语义版本控制进行独立版本化。每种对象都有以下形式:
{
"kind": "<kind>",
"version": { "major": 1, "minor": 0 },
"...": {}
}
kind 成员是指定对象种类名称的字符串。version 成员是一个带有 major 和 minor 成员的 JSON 对象,指定对象种类版本的整数组件。额外的顶层成员特定于每个对象种类。
"codemodel" 对象种类¶
codemodel 对象种类描述了 CMake 所建模的构建系统结构。
只有一个 codemodel 对象主要版本,即版本 2。版本 1 不存在,以避免与 cmake-server(7) 模式中的混淆。
4.1 版本新增: codemodel 对象种类回复通过 此 JSON 模式 以机器可读的形式描述。
"codemodel" 版本 2¶
codemodel 对象版本 2 是一个 JSON 对象
{
"kind": "codemodel",
"version": { "major": 2, "minor": 8 },
"paths": {
"source": "/path/to/top-level-source-dir",
"build": "/path/to/top-level-build-dir"
},
"configurations": [
{
"name": "Debug",
"directories": [
{
"source": ".",
"build": ".",
"childIndexes": [ 1 ],
"projectIndex": 0,
"targetIndexes": [ 0 ],
"abstractTargetIndexes": [ 1 ],
"hasInstallRule": true,
"minimumCMakeVersion": {
"string": "3.14"
},
"jsonFile": "<file>"
},
{
"source": "sub",
"build": "sub",
"parentIndex": 0,
"projectIndex": 0,
"targetIndexes": [ 1 ],
"abstractTargetIndexes": [ 0 ],
"minimumCMakeVersion": {
"string": "3.14"
},
"jsonFile": "<file>"
}
],
"projects": [
{
"name": "MyProject",
"directoryIndexes": [ 0, 1 ],
"targetIndexes": [ 0, 1 ],
"abstractTargetIndexes": [ 0, 1 ],
}
],
"targets": [
{
"name": "MyExecutable",
"directoryIndex": 0,
"projectIndex": 0,
"jsonFile": "<file>"
},
{
"name": "MyLibrary",
"directoryIndex": 1,
"projectIndex": 0,
"jsonFile": "<file>"
}
]
"abstractTargets": [
{
"name": "MyImportedExecutable",
"directoryIndex": 1,
"projectIndex": 0,
"jsonFile": "<file>"
},
{
"name": "MyPureInterfaceLibrary",
"directoryIndex": 0,
"projectIndex": 0,
"jsonFile": "<file>"
}
]
}
]
}
codemodel 对象特有的成员包括
paths包含以下成员的 JSON 对象
源指定顶层源目录绝对路径的字符串(用正斜杠表示)。
构建指定顶层构建目录绝对路径的字符串(用正斜杠表示)。
configurations对应于可用构建配置的条目组成的 JSON 数组。对于单配置生成器,存在一个对应于
CMAKE_BUILD_TYPE变量值的条目。对于多配置生成器,存在一个对应于CMAKE_CONFIGURATION_TYPES变量中列出的每个配置的条目。每个条目都是一个包含以下成员的 JSON 对象:名称指定配置名称的字符串,例如
Debug。directories条目组成的 JSON 数组,每个条目对应一个其源目录包含
CMakeLists.txt文件的构建系统目录。第一个条目对应于顶层目录。每个条目都是一个包含以下成员的 JSON 对象:源指定源目录路径的字符串(用正斜杠表示)。如果该目录在顶层源目录内,则路径是相对于该目录指定的(使用
.表示顶层源目录本身)。否则,路径是绝对路径。构建指定构建目录路径的字符串(用正斜杠表示)。如果该目录在顶层构建目录内,则路径是相对于该目录指定的(使用
.表示顶层构建目录本身)。否则,路径是绝对路径。parentIndex当目录不是顶层目录时存在的可选成员。该值是主
directories数组中另一个条目的从 0 开始的无符号整数索引,该索引对应于将此目录添加为子目录的父目录。childIndexes当目录具有子目录时存在的可选成员。该值是对应于由
add_subdirectory()或subdirs()命令创建的子目录的条目组成的 JSON 数组。每个条目都是主directories数组中另一个条目的从 0 开始的无符号整数索引。projectIndex指向主
projects数组的从 0 开始的无符号整数索引,指示此目录所属的构建系统项目。targetIndexes当目录本身拥有构建系统目标(不包括属于子目录的目标)时存在的可选成员。该值是对应于构建系统目标的条目组成的 JSON 数组。每个条目是指向主
targets数组的从 0 开始的无符号整数索引。abstractTargetIndexes当目录本身拥有抽象目标(不包括属于子目录的目标)时存在的可选成员。该值是对应于抽象目标的条目组成的 JSON 数组。每个条目是指向主
abstractTargets数组的从 0 开始的无符号整数索引。此字段在 codemodel 版本 2.9 中添加。
minimumCMakeVersion当已知该目录的 CMake 最低要求版本时存在的可选成员。这是在目录本身或其祖先之一中最局部调用的
cmake_minimum_required(VERSION)命令赋予的<min>版本。该值是一个包含一个成员的 JSON 对象string指定最低要求版本的字符串,格式为
<major>.<minor>[.<patch>[.<tweak>]][<suffix>]
每个组件都是一个无符号整数,后缀可以是任意字符串。
hasInstallRule当目录或其子目录之一包含任何
install()规则时(即是否可以使用make install或等效规则),存在的布尔值为true的可选成员。jsonFile一个 JSON 字符串,指定相对于 codemodel 文件到包含 "codemodel" 版本 2 "directory" 对象的另一个 JSON 文件的路径。
此字段在 codemodel 版本 2.3 中添加。
projects对应于构建系统中定义的顶层项目和子项目的条目组成的 JSON 数组。每个(子)项目对应于一个源目录,其
CMakeLists.txt文件调用了project()命令,且项目名称与其父目录不同。第一个条目对应于顶层项目。每个条目都是一个包含以下成员的 JSON 对象:
名称指定赋予
project()命令的名称的字符串。parentIndex当项目不是顶层项目时存在的可选成员。该值是主
projects数组中另一个条目的从 0 开始的无符号整数索引,该索引对应于将此项目添加为子项目的父项目。childIndexes当项目具有子项目时存在的可选成员。该值是对应于子项目的条目组成的 JSON 数组。每个条目是主
projects数组中另一个条目的从 0 开始的无符号整数索引。directoryIndexes对应于属于该项目的构建系统目录的条目组成的 JSON 数组。第一个条目对应于该项目的顶层目录。每个条目是指向主
directories数组的从 0 开始的无符号整数索引。targetIndexes当项目本身拥有构建系统目标(不包括属于子项目的目标)时存在的可选成员。该值是对应于构建系统目标的条目组成的 JSON 数组。每个条目是指向主
targets数组的从 0 开始的无符号整数索引。abstractTargetIndexes当项目本身拥有抽象目标(不包括属于子项目的目标)时存在的可选成员。该值是对应于抽象目标的条目组成的 JSON 数组。每个条目是指向主
abstractTargets数组的从 0 开始的无符号整数索引。此字段在 codemodel 版本 2.9 中添加。
targets对应于构建系统目标的条目组成的 JSON 数组。此类目标通过调用
add_executable()、add_library()和add_custom_target()创建,不包括不生成任何构建规则的导入目标和接口库。每个条目都是一个包含以下成员的 JSON 对象:名称指定目标名称的字符串。
id唯一标识目标的字符串。这与
jsonFile引用的文件中的id字段匹配。directoryIndex指向主
directories数组的从 0 开始的无符号整数索引,指示定义该目标的构建系统目录。projectIndex指向主
projects数组的从 0 开始的无符号整数索引,指示定义该目标的构建系统项目。jsonFile一个 JSON 字符串,指定相对于 codemodel 文件到包含 "codemodel" 版本 2 "target" 对象的另一个 JSON 文件的路径。
abstractTargets对应于构建系统中不存在的目标的条目组成的 JSON 数组。这些是通过调用
add_executable()或add_library()创建的导入目标或接口库。对于接口库,只有那些不属于构建系统的才会被包含在此数组中。参与构建系统的接口库将被包含在targets数组中。每个条目都是一个包含以下成员的 JSON 对象:
名称指定目标名称的字符串。
id唯一标识目标的字符串。这与
jsonFile引用的文件中的id字段匹配。directoryIndex指向主
directories数组的从 0 开始的无符号整数索引,指示定义该目标的构建系统目录。projectIndex指向主
projects数组的从 0 开始的无符号整数索引,指示定义该目标的构建系统项目。jsonFile一个 JSON 字符串,指定相对于 codemodel 文件到包含 "codemodel" 版本 2 "target" 对象的另一个 JSON 文件的路径。
此字段在 codemodel 版本 2.9 中添加。
"codemodel" 版本 2 "directory" 对象¶
4.1 版本新增: directory 对象回复通过 此 JSON 模式 以机器可读的形式描述。
codemodel "directory" 对象由 "codemodel" 版本 2 对象的 directories 数组引用。每个 "directory" 对象都是一个包含以下成员的 JSON 对象:
codemodelVersion这指定了此文件所属的 codemodel 版本。它将与引用此文件的 codemodel 对象种类的
version字段匹配。它是一个包含以下成员的 JSON 对象主要版本codemodel 主要版本。
次要版本codemodel 次要版本。
此字段在 codemodel 版本 2.9 中添加。
paths包含以下成员的 JSON 对象
源指定源目录路径的字符串(用正斜杠表示)。如果该目录在顶层源目录内,则路径是相对于该目录指定的(使用
.表示顶层源目录本身)。否则,路径是绝对路径。构建指定构建目录路径的字符串(用正斜杠表示)。如果该目录在顶层构建目录内,则路径是相对于该目录指定的(使用
.表示顶层构建目录本身)。否则,路径是绝对路径。
installers对应于
install()规则的条目组成的 JSON 数组。每个条目都是一个包含以下成员的 JSON 对象component指定由相应的
install()命令调用所选组件的字符串。destination针对下述特定
type值存在的可选成员。该值是指定安装目标路径的字符串。路径可以是绝对路径,也可以是相对于安装前缀的相对路径。paths针对下述特定
type值存在的可选成员。该值是对应于要安装的路径(文件或目录)的条目组成的 JSON 数组。每个条目是指定要从中安装文件或目录的路径的字符串。路径中不受
/前导的部分也指定了在目标下安装该文件或目录的路径(名称)。包含以下成员的 JSON 对象
from指定要从中安装文件或目录的路径的字符串。
到指定在目标下安装该文件或目录的路径的字符串。
在这两种情况下,路径都用正斜杠表示。如果 "from" 路径在相应
type值记录的顶层目录内,则路径是相对于该目录指定的。否则,路径是绝对路径。type指定安装规则类型的字符串。该值是以下之一,某些变体提供额外的成员
fileinstall(FILES)或install(PROGRAMS)调用。destination和paths成员被填充,顶层源目录下的路径表示为相对于该目录。可能存在isOptional成员。此类型没有额外的成员。directoryinstall(DIRECTORY)调用。destination和paths成员被填充,顶层源目录下的路径表示为相对于该目录。可能存在isOptional成员。此类型没有额外的成员。目标install(TARGETS)调用。destination和paths成员被填充,顶层构建目录下的路径表示为相对于该目录。可能存在isOptional成员。此类型具有额外的成员targetId、targetIndex、targetIsImportLibrary和targetInstallNamelink。exportinstall(EXPORT)调用。destination和paths成员被填充,顶层构建目录下的路径表示为相对于该目录。paths条目指的是 CMake 自动生成的用于安装的文件,其实际值被视为私有实现细节。此类型具有额外的成员exportName和exportTargets。scriptinstall(SCRIPT)调用。此类型具有额外的成员scriptFile。codeinstall(CODE)调用。此类型没有额外的成员。importedRuntimeArtifactsinstall(IMPORTED_RUNTIME_ARTIFACTS)调用。destination成员被填充。可能存在isOptional成员。此类型没有额外的成员。runtimeDependencySetinstall(RUNTIME_DEPENDENCY_SET)调用或带有RUNTIME_DEPENDENCIES的install(TARGETS)调用。destination成员被填充。此类型具有额外的成员runtimeDependencySetName和runtimeDependencySetType。fileSet带有
FILE_SET的install(TARGETS)调用。destination和paths成员被填充。可能存在isOptional成员。此类型具有额外的成员fileSetName、fileSetType、fileSetDirectories和fileSetTarget。此类型在 codemodel 版本 2.4 中添加。
cxxModuleBmi带有
CXX_MODULES_BMI的install(TARGETS)调用。destination成员被填充,且可能存在isOptional成员。此类型具有额外的cxxModuleBmiTarget成员。此类型在 codemodel 版本 2.5 中添加。
isExcludeFromAll当
install()与EXCLUDE_FROM_ALL选项一起调用时,存在且布尔值为true的可选成员。isForAllComponents当
install(SCRIPT|CODE)与ALL_COMPONENTS选项一起调用时,存在且布尔值为true的可选成员。isOptional当
install()与OPTIONAL选项一起调用时,存在且布尔值为true的可选成员。当type为file、directory或target时,这是允许的。targetId当
type为target时存在的可选成员。该值是唯一标识要安装的目标的字符串。这与主 "codemodel" 对象targets数组中目标的id成员匹配。targetIndex当
type为target时存在的可选成员。该值是主 "codemodel" 对象targets数组中要安装目标的从 0 开始的无符号整数索引。targetIsImportLibrary当
type为target且安装程序用于 Windows DLL 导入库文件或 AIX 链接器导入文件时存在的可选成员。如果存在,其布尔值为true。targetInstallNamelink当
type为target且安装程序对应于可能使用符号链接来实现VERSION和SOVERSION目标属性的目标时存在的可选成员。该值是指示安装程序应如何处理符号链接的字符串:skip表示安装程序应跳过符号链接并仅安装实际文件,only表示安装程序应仅安装符号链接而不安装实际文件。在所有情况下,paths成员都会列出它实际安装的内容。exportName当
type为export时存在的可选成员。该值是指定导出名称的字符串。exportTargets当
type为export时存在的可选成员。该值是对应于包含在导出中的目标的条目组成的 JSON 数组。每个条目都是一个包含以下成员的 JSON 对象id唯一标识目标的字符串。这与主 "codemodel" 对象
targets数组中目标的id成员匹配。索引目标在主 "codemodel" 对象
targets数组中的从 0 开始的无符号整数索引。
runtimeDependencySetName当
type为runtimeDependencySet且安装程序由install(RUNTIME_DEPENDENCY_SET)调用创建时存在的可选成员。该值是指定所安装运行时依赖集名称的字符串。runtimeDependencySetType当
type为runtimeDependencySet时存在的可选成员。该值是以下值之一的字符串library指示此安装程序安装非 macOS 框架的依赖项。
framework指示此安装程序安装 macOS 框架的依赖项。
fileSetName当
type为fileSet时存在的可选成员。该值是包含文件集名称的字符串。此字段在 codemodel 版本 2.4 中添加。
fileSetType当
type为fileSet时存在的可选成员。该值是包含文件集类型的字符串。此字段在 codemodel 版本 2.4 中添加。
fileSetDirectories当
type为fileSet时存在的可选成员。该值是包含文件集基目录的字符串列表(由HEADER_DIRS或HEADER_DIRS_<NAME>的生成表达式评估确定)。此字段在 codemodel 版本 2.4 中添加。
fileSetTarget当
type为fileSet时存在的可选成员。该值是一个包含以下成员的 JSON 对象id唯一标识目标的字符串。这与主 "codemodel" 对象
targets数组中目标的id成员匹配。索引目标在主 "codemodel" 对象
targets数组中的从 0 开始的无符号整数索引。
此字段在 codemodel 版本 2.4 中添加。
cxxModuleBmiTarget当
type为cxxModuleBmi时存在的可选成员。该值是一个包含以下成员的 JSON 对象id唯一标识目标的字符串。这与主 "codemodel" 对象
targets数组中目标的id成员匹配。索引目标在主 "codemodel" 对象
targets数组中的从 0 开始的无符号整数索引。
此字段在 codemodel 版本 2.5 中添加。
scriptFile当
type为script时存在的可选成员。该值是指定磁盘上脚本文件路径的字符串(用正斜杠表示)。如果文件在顶层源目录内,则路径是相对于该目录指定的。否则,路径是绝对路径。回溯当可以使用指向添加此安装程序的
install()或其他命令调用的 CMake 语言回溯时,存在的可选成员。该值是backtraceGraph成员的nodes数组中从 0 开始的无符号整数索引。
backtraceGraph一个 "codemodel" 版本 2 "backtrace graph",其节点被此 "directory" 对象中其他地方的
backtrace成员引用。
"codemodel" 版本 2 "target" 对象¶
4.1 版本新增: target 对象回复通过 此 JSON 模式 以机器可读的形式描述。
codemodel "target" 对象由 "codemodel" 版本 2 对象的 targets 数组引用。每个 "target" 对象都是一个包含以下成员的 JSON 对象:
codemodelVersion这指定了此文件所属的 codemodel 版本。它将与引用此文件的 codemodel 对象种类的
version字段匹配。它是一个包含以下成员的 JSON 对象主要版本codemodel 主要版本。
次要版本codemodel 次要版本。
此字段在 codemodel 版本 2.9 中添加。
名称指定目标逻辑名称的字符串。
id唯一标识目标的字符串。格式未指定,客户端不应解释。
type指定目标类型的字符串。该值是
EXECUTABLE、STATIC_LIBRARY、SHARED_LIBRARY、MODULE_LIBRARY、OBJECT_LIBRARY、INTERFACE_LIBRARY或UTILITY之一。imported如果目标是导入目标,则存在且布尔值为
true的可选成员。此字段在 codemodel 版本 2.9 中添加。
local如果目标仅定义为局部作用域而不是全局目标,则存在且布尔值为
true的可选成员。目前,只有导入的目标可能具有此字段。此字段在 codemodel 版本 2.9 中添加。
abstract如果目标是抽象目标,则存在且布尔值为
true的可选成员。抽象目标不是构建系统的一部分,它们仅用于描述依赖项或为链接到它们的目标提供使用要求。示例包括没有生成源代码的导入目标和接口库。抽象目标无法构建,因此不应将其呈现给用户作为可构建目标。此字段在 codemodel 版本 2.9 中添加。codemodel 版本 2.8 及更早版本不包括抽象目标。
symbolic可选成员,如果目标是
SYMBOLIC,则该成员存在且布尔值为true。符号目标通过调用add_library(INTERFACE SYMBOLIC)创建,它们也是不属于构建系统的抽象目标。此字段添加于 codemodel 2.9 版本。符号目标未包含在 codemodel 2.8 及更早版本中。
回溯可选成员,当存在创建该目标的源代码中命令的 CMake 语言回溯(backtrace)时出现。其值是一个基于 0 的无符号整数索引,指向
backtraceGraph成员的nodes数组。folder可选成员,当设置了
FOLDER目标属性时出现。其值为一个包含一个成员的 JSON 对象名称指定目标文件夹名称的字符串。
paths包含以下成员的 JSON 对象
源指定目标源目录路径的字符串,以正斜杠表示。如果目录位于顶级源目录内,则路径相对于该目录指定(使用
.表示顶级源目录本身)。否则,路径为绝对路径。构建指定目标构建目录路径的字符串,以正斜杠表示。如果目录位于顶级构建目录内,则路径相对于该目录指定(使用
.表示顶级构建目录本身)。否则,路径为绝对路径。
nameOnDisk可选成员,出现在链接或归档为单个主要产物的可执行文件和库目标中。其值为指定该产物在磁盘上文件名的字符串。
artifacts可选成员,出现在产生旨在供依赖项使用的磁盘产物的可执行文件和库目标中。其值为对应于产物的 JSON 对象数组。每个条目都是一个包含一个成员的 JSON 对象
path指定磁盘上文件路径的字符串,以正斜杠表示。如果文件位于顶级构建目录内,则路径相对于该目录指定。否则,路径为绝对路径。
isGeneratorProvided可选成员,如果目标是由 CMake 的构建系统生成器提供,而不是由源代码中的命令提供,则存在且布尔值为
true。安装可选成员,当目标具有
install()规则时出现。其值为一个包含成员的 JSON 对象prefix指定安装前缀的 JSON 对象。它有一个成员
path指定
CMAKE_INSTALL_PREFIX值的字符串。
destinations指定安装目标路径的 JSON 对象数组。每个条目都是一个包含成员的 JSON 对象
path指定安装目标路径的字符串。该路径可以是绝对路径,也可以是相对于安装前缀的路径。
回溯可选成员,当存在指向指定此目标的
install()命令调用的 CMake 语言回溯时出现。其值是一个基于 0 的无符号整数索引,指向backtraceGraph成员的nodes数组。
launchers可选成员,出现在由项目指定了至少一个启动器(launcher)的可执行目标上。其值为对应于指定启动器的 JSON 对象数组。每个条目都是一个包含成员的 JSON 对象
命令指定磁盘上启动器路径的字符串,以正斜杠表示。如果文件位于顶级源目录内,则路径相对于该目录指定。
arguments可选成员,当启动器命令在要启动的可执行文件之前具有参数时出现。其值为表示这些参数的 JSON 字符串数组。
type指定启动器类型的字符串。其值为以下之一
emulator交叉编译时用于目标平台的仿真器。请参阅
CROSSCOMPILING_EMULATOR目标属性。测试用于执行测试的启动程序。请参阅
TEST_LAUNCHER目标属性。
此字段添加于 codemodel 2.7 版本。
link可选成员,出现在链接到运行时二进制文件的非导入式可执行文件和共享库目标中。其值为一个包含描述链接步骤成员的 JSON 对象
language指定用于调用链接器的工具链语言(例如
C,CXX,Fortran)的字符串。commandFragments可选成员,当存在链接命令行调用的片段时出现。其值为指定有序片段的 JSON 对象数组。每个条目都是一个包含成员的 JSON 对象
fragment指定链接命令行调用片段的字符串。其值以构建系统的原生 shell 格式编码。
role指定片段内容角色的字符串
flags:链接标志。libraries:链接库文件路径或标志。libraryPath:库搜索路径标志。frameworkPath:macOS 框架搜索路径标志。
回溯可选成员,当存在指向
target_link_libraries()、target_link_options()或其他添加此链接片段的命令调用的 CMake 语言回溯时出现。其值是一个基于 0 的无符号整数索引,指向backtraceGraph成员的nodes数组。
lto可选成员,当启用链接时优化(也称为过程间优化或链接时代码生成)时出现,布尔值为
true。sysroot可选成员,当定义了
CMAKE_SYSROOT_LINK或CMAKE_SYSROOT变量时出现。其值为一个包含一个成员的 JSON 对象path指定 sysroot 绝对路径的字符串,以正斜杠表示。
archive可选成员,出现在非导入式静态库目标中。其值为一个包含描述归档步骤成员的 JSON 对象
commandFragments可选成员,当存在归档程序命令行调用的片段时出现。其值为指定片段的 JSON 对象数组。每个条目都是一个包含成员的 JSON 对象
fragment指定归档程序命令行调用片段的字符串。其值以构建系统的原生 shell 格式编码。
role指定片段内容角色的字符串
flags:归档程序标志。
lto可选成员,当启用链接时优化(也称为过程间优化或链接时代码生成)时出现,布尔值为
true。
debugger可选成员,当目标设置了以下字段之一时出现。其值为对应于所设置的调试器特定值的 JSON 对象数组。
此字段添加于 codemodel 2.8 版本。
workingDirectory可选成员,当设置了
DEBUGGER_WORKING_DIRECTORY目标属性时出现。当设置了VS_DEBUGGER_WORKING_DIRECTORY时,该成员也会出现在 Visual Studio 生成器 中。此字段添加于 codemodel 2.8 版本。
dependencies可选成员,当目标依赖于其他目标时出现。它仅在目标属于构建系统时出现。导入的目标不属于构建系统。接口库仅在具有源文件或文件集时才属于构建系统。
其值为对应于构建依赖项的 JSON 对象数组。该数组不仅包括直接依赖项,还包括传递依赖项。所有列出的目标都将在本目标之前构建。
依赖项列表反映了构建图依赖项,而不一定是链接依赖项。如果静态库的链接依赖项中存在循环,并非所有链接依赖项都会反映在此构建图依赖项列表中。
每个条目都是一个包含成员的 JSON 对象
id唯一标识本目标所依赖目标的字符串。这与另一个目标的主
id成员匹配。回溯可选成员,当存在指向
add_dependencies()、target_link_libraries()或其他创建此依赖项的命令调用的 CMake 语言回溯时出现。其值是一个基于 0 的无符号整数索引,指向backtraceGraph成员的nodes数组。
linkLibraries可选成员,当目标直接链接到一个或多个其他目标或库时可能出现。它包含链接此目标时使用的项。这些项来自目标的
LINK_LIBRARIES属性(非传递性评估),或其直接或传递链接的另一个目标的INTERFACE_LINK_LIBRARIES_DIRECT属性。仅作为使用要求应用的项(例如包装在
$<COMPILE_ONLY:...>表达式中)不会出现在此成员中。其值为 JSON 对象数组。每个条目都是一个包含成员的 JSON 对象
id可选成员,当要链接的库是一个目标时出现。它唯一标识本目标与之有直接链接关系的目标。这与该其他目标的主
id成员匹配。此
id标识的目标不一定属于构建系统。它可能是一个导入的目标或没有源文件或文件集的接口库。id或fragment其中之一将始终存在。fragment可选成员,当要链接的库不是目标时出现。它是一个字符串,包含捕获该关系的原始链接器命令行参数。这些通常是按名称而不是按目标链接到库或框架。
id或fragment其中之一将始终存在。回溯可选成员,当存在指向创建此关系的命令调用的 CMake 语言回溯时出现。其值是一个基于 0 的无符号整数索引,指向
backtraceGraph成员的nodes数组。fromDependency可选成员,仅当该关系是本目标直接或传递链接的库之一上的
INTERFACE_LINK_LIBRARIES_DIRECT目标属性的结果时出现。它是一个包含一个成员的 JSON 对象id唯一标识其
INTERFACE_LINK_LIBRARIES_DIRECT属性创建了该关系的目标的字符串。该值与该目标的主id成员匹配。
此字段在 codemodel 版本 2.9 中添加。
interfaceLinkLibraries可选成员,当目标具有一个或多个接口链接库时可能出现。它包含链接此目标的消费者时使用的项。这些来自目标的
INTERFACE_LINK_LIBRARIES属性。仅作为使用要求应用的项(例如包装在
$<COMPILE_ONLY:...>表达式中)不会出现在此成员中。其值为 JSON 对象数组。每个条目都是一个包含成员的 JSON 对象
id可选成员,当接口链接库是针对某个目标时出现。它唯一标识该目标,其值与该目标的主
id成员匹配。此
id标识的目标不一定属于构建系统。它可能是一个导入的目标或没有源文件或文件集的接口库。id或fragment其中之一将始终存在。fragment可选成员,当接口链接库不是针对某个目标时出现。它是一个字符串,包含要应用于此目标的接口链接库消费者的原始链接器命令行参数。这些通常是用于按名称而不是按目标链接到库或框架的链接器参数。
id或fragment其中之一将始终存在。回溯可选成员,当存在指向创建此接口关系的命令调用的 CMake 语言回溯时出现。其值是一个基于 0 的无符号整数索引,指向
backtraceGraph成员的nodes数组。
此字段在 codemodel 版本 2.9 中添加。
compileDependencies可选成员,当目标直接链接到一个或多个可能为此目标提供使用要求的其他目标时可能出现。它们影响本目标源文件的编译方式。这些关系由目标的
LINK_LIBRARIES属性(非传递性评估)以及其直接或传递链接的其它目标的INTERFACE_LINK_LIBRARIES_DIRECT属性定义。仅应用链接要求的关系(例如包装在
$<LINK_ONLY:...>表达式中)不会出现在此成员中。其值为 JSON 对象数组。每个条目都是一个包含成员的 JSON 对象
id唯一标识本目标直接依赖的目标的字符串。这与另一个目标的主
id成员匹配。此
id标识的目标不一定属于构建系统。它可能是一个导入的目标或没有源文件或文件集的接口库。回溯可选成员,当存在指向创建此关系的命令调用的 CMake 语言回溯时出现。其值是一个基于 0 的无符号整数索引,指向
backtraceGraph成员的nodes数组。fromDependency可选成员,仅当该关系是本目标直接或传递链接的库之一上的
INTERFACE_LINK_LIBRARIES_DIRECT目标属性的结果时出现。它是一个包含一个成员的 JSON 对象id唯一标识其
INTERFACE_LINK_LIBRARIES_DIRECT属性创建了该关系的目标的字符串。该值与该目标的主id成员匹配。
此字段在 codemodel 版本 2.9 中添加。
interfaceCompileDependencies可选成员,当目标具有一个或多个到其他目标的接口链接关系时可能出现。它包含影响消费者源文件编译方式的项。这些关系由目标的
INTERFACE_LINK_LIBRARIES属性定义。仅应用链接要求的关系(例如包装在
$<LINK_ONLY:...>表达式中)不会出现在此成员中。其值为 JSON 对象数组。每个条目都是一个包含成员的 JSON 对象
id唯一标识本目标指定接口关系的目标的字符串。这与另一个目标的主
id成员匹配。此
id标识的目标不一定属于构建系统。它可能是一个导入的目标或没有源文件或文件集的接口库。回溯可选成员,当存在指向创建此关系的命令调用的 CMake 语言回溯时出现。其值是一个基于 0 的无符号整数索引,指向
backtraceGraph成员的nodes数组。
此字段在 codemodel 版本 2.9 中添加。
objectDependencies可选成员,当目标在其
SOURCES属性中有一个或多个条目使用$<TARGET_OBJECTS:...>指定,且在$<TARGET_OBJECTS:...>表达式内没有使用其他生成器表达式时出现。其值为 JSON 对象数组。每个条目都是一个包含成员的 JSON 对象
id唯一标识其对象在
$<TARGET_OBJECTS:...>表达式中被引用的目标的字符串。这与该其他目标的主id成员匹配。回溯可选成员,当存在指向创建此依赖项的命令调用的 CMake 语言回溯时出现。其值是一个基于 0 的无符号整数索引,指向
backtraceGraph成员的nodes数组。
此字段在 codemodel 版本 2.9 中添加。
orderDependencies可选成员,当目标对其他目标具有一个或多个直接顺序依赖项时出现。此类依赖项可能产生于对
add_dependencies()的调用或 CMake 内部处理。与dependencies数组不同,ZERO_CHECK目标不会包含在orderDependencies中(这仅与Xcode和 Visual Studio 生成器有关)。其值为 JSON 对象数组。每个条目都是一个包含成员的 JSON 对象
id唯一标识本目标所依赖目标的字符串。这与另一个目标的主
id成员匹配。回溯可选成员,当存在指向创建此依赖项的命令调用的 CMake 语言回溯时出现。其值是一个基于 0 的无符号整数索引,指向
backtraceGraph成员的nodes数组。
此字段在 codemodel 版本 2.9 中添加。
fileSets当目标定义一个或多个文件集时出现的可选成员。其值为对应于目标文件集的 JSON 对象数组。每个条目都是一个包含成员的 JSON 对象
名称指定文件集名称的字符串。
type指定文件集类型的字符串。请参阅
target_sources()支持的文件集类型。visibility指定文件集可见性的字符串;为
PUBLIC、PRIVATE或INTERFACE之一。baseDirectories字符串的 JSON 数组,每个字符串指定包含文件集中源文件的基目录。如果目录位于顶级源目录内,则路径相对于该目录指定。否则,路径为绝对路径。
此字段在 codemodel 版本 2.5 中添加。
sources对应于目标源文件的条目 JSON 数组。每个条目都是一个包含成员的 JSON 对象
path指定磁盘上源文件路径的字符串,以正斜杠表示。如果文件位于顶级源目录内,则路径相对于该目录指定。否则,路径为绝对路径。
compileGroupIndex可选成员,当源文件被编译时出现。其值是一个基于 0 的无符号整数索引,指向
compileGroups数组。sourceGroupIndex可选成员,当源文件通过
source_group()命令或默认情况下成为源组的一部分时出现。其值是一个基于 0 的无符号整数索引,指向sourceGroups数组。isGenerated可选成员,如果源文件是
GENERATED,则存在且布尔值为true。fileSetIndex可选成员,当源文件是文件集的一部分时出现。其值是一个基于 0 的无符号整数索引,指向
fileSets数组。此字段在 codemodel 版本 2.5 中添加。
回溯可选成员,当存在指向
target_sources()、add_executable()、add_library()、add_custom_target()或其他将此源文件添加到目标的命令调用的 CMake 语言回溯时出现。其值是一个基于 0 的无符号整数索引,指向backtraceGraph成员的nodes数组。
interfaceSources当目标定义一个或多个接口源文件时出现的可选成员。其值为对应于目标接口源文件的条目 JSON 数组。每个条目都是一个包含成员的 JSON 对象
path指定磁盘上源文件路径的字符串,以正斜杠表示。如果文件位于顶级源目录内,则路径相对于该目录指定。否则,路径为绝对路径。
sourceGroupIndex可选成员,当源文件通过
source_group()命令或默认情况下成为源组的一部分时出现。其值是一个基于 0 的无符号整数索引,指向sourceGroups数组。isGenerated可选成员,如果源文件是
GENERATED,则存在且布尔值为true。fileSetIndex可选成员,当源文件是文件集的一部分时出现。其值是一个基于 0 的无符号整数索引,指向
fileSets数组。
此字段添加于 codemodel 2.10 版本。
sourceGroups可选成员,当源文件通过
source_group()命令或默认情况下被分组在一起时出现。其值为对应于这些组的条目 JSON 数组。每个条目都是一个包含成员的 JSON 对象名称指定源组名称的字符串。
sourceIndexes列出属于该组的源文件的 JSON 数组。每个条目都是一个指向目标主
sources数组的基于 0 的无符号整数索引。interfaceSourceIndexes可选成员,当至少有一个接口源文件属于该源组时出现。其值为列出属于该组的接口源文件的 JSON 数组。每个条目都是一个指向目标主
interfaceSources数组的基于 0 的无符号整数索引。此字段添加于 codemodel 2.10 版本。
compileGroups可选成员,当目标具有需要编译的源文件时出现。其值为对应于所有使用相同设置编译的源文件组的条目 JSON 数组。每个条目都是一个包含成员的 JSON 对象
sourceIndexes列出属于该组的源文件的 JSON 数组。每个条目都是一个指向目标主
sources数组的基于 0 的无符号整数索引。language指定用于编译源文件的工具链语言(例如
C,CXX,Fortran)的字符串。languageStandard可选成员,当明确设置语言标准(例如通过
CXX_STANDARD)或隐式通过编译特性设置时出现。每个条目都是一个包含两个成员的 JSON 对象backtraces可选成员,当存在指向
<LANG>_STANDARD设置的 CMake 语言回溯时出现。如果语言标准是通过编译特性隐式设置的,则这些特性被用作回溯。多个编译特性可能要求相同的语言标准,因此可能存在多个回溯。其值为 JSON 数组,每个条目都是一个指向backtraceGraph成员的nodes数组的基于 0 的无符号整数索引。standard表示语言标准的字符串。
此字段添加于 codemodel 2.2 版本。
compileCommandFragments可选成员,当存在编译器命令行调用的片段时出现。其值为指定有序片段的条目 JSON 数组。每个条目都是一个包含一个成员的 JSON 对象
fragment指定编译命令行调用片段的字符串。其值以构建系统的原生 shell 格式编码。
回溯可选成员,当存在指向添加此片段的命令调用的 CMake 语言回溯时出现。其值是一个基于 0 的无符号整数索引,指向
backtraceGraph成员的nodes数组。
includes可选成员,当存在包含目录时出现。其值为每个目录包含一个条目的 JSON 数组。每个条目都是一个包含成员的 JSON 对象
path指定包含目录路径的字符串,以正斜杠表示。
isSystem可选成员,如果包含目录被标记为系统包含目录,则存在且布尔值为
true。回溯可选成员,当存在指向
target_include_directories()或其他添加此包含目录的命令调用的 CMake 语言回溯时出现。其值是一个基于 0 的无符号整数索引,指向backtraceGraph成员的nodes数组。
frameworks可选成员,当在 Apple 平台上存在框架时出现。其值为每个目录包含一个条目的 JSON 数组。每个条目都是一个包含成员的 JSON 对象
path指定框架目录路径的字符串,以正斜杠表示。
isSystem可选成员,如果框架被标记为系统框架,则存在且布尔值为
true。回溯可选成员,当存在指向
target_link_libraries()或其他添加此框架的命令调用的 CMake 语言回溯时出现。其值是一个基于 0 的无符号整数索引,指向backtraceGraph成员的nodes数组。
此字段添加于 codemodel 2.6 版本。
precompileHeaders可选成员,当
target_precompile_headers()或其他命令调用在目标上设置了PRECOMPILE_HEADERS时出现。其值为每个头文件包含一个条目的 JSON 数组。每个条目都是一个包含成员的 JSON 对象header预编译头文件的完整路径。
回溯可选成员,当存在指向
target_precompile_headers()或其他添加此预编译头文件的命令调用的 CMake 语言回溯时出现。其值是一个基于 0 的无符号整数索引,指向backtraceGraph成员的nodes数组。
此字段添加于 codemodel 2.1 版本。
defines可选成员,当存在预处理器定义时出现。其值为每个定义包含一个条目的 JSON 数组。每个条目都是一个包含成员的 JSON 对象
define指定格式为
<name>[=<value>]的预处理器定义的字符串,例如DEF或DEF=1。回溯可选成员,当存在指向
target_compile_definitions()或其他添加此预处理器定义的命令调用的 CMake 语言回溯时出现。其值是一个基于 0 的无符号整数索引,指向backtraceGraph成员的nodes数组。
sysroot可选成员,当定义了
CMAKE_SYSROOT_COMPILE或CMAKE_SYSROOT变量时出现。其值为一个包含一个成员的 JSON 对象path指定 sysroot 绝对路径的字符串,以正斜杠表示。
backtraceGraph一个 "codemodel" 2 版本 "回溯图",其节点被本 "target" 对象中其他地方的
backtrace成员引用。
"codemodel" 2 版本 "回溯图"¶
"codemodel" 2 版本 "directory" 对象 或 "codemodel" 2 版本 "target" 对象 的 backtraceGraph 成员是一个描述回溯图的 JSON 对象。其节点被包含对象中其他地方的 backtrace 成员引用。回溯图对象成员为
nodes列出回溯图中节点的 JSON 数组。每个条目都是一个包含成员的 JSON 对象
file指向回溯
files数组的基于 0 的无符号整数索引。行当节点表示文件中的某一行时出现的可选成员。其值为基于 1 的无符号整数行号。
命令当节点表示文件中的命令调用时出现的可选成员。其值为指向回溯
commands数组的基于 0 的无符号整数索引。parent当节点不是调用栈底部时出现的可选成员。其值为回溯
nodes数组中另一个条目的基于 0 的无符号整数索引。
commands列出回溯节点引用的命令名称的 JSON 数组。每个条目都是一个指定命令名称的字符串。
files列出回溯节点引用的 CMake 语言文件的 JSON 数组。每个条目都是一个指定文件路径的字符串,以正斜杠表示。如果文件位于顶级源目录内,则路径相对于该目录指定。否则,路径为绝对路径。
对象类型 "configureLog"¶
3.26 版新增。
configureLog 对象类型描述了 cmake-configure-log(7) 文件的位置和内容。
仅有一个 configureLog 对象主版本,即版本 1。
4.1 版本新增:configureLog 对象类型回复由 此 JSON 模式 以机器可读形式描述。
"configureLog" 版本 1¶
configureLog 对象版本 1 是一个 JSON 对象
{
"kind": "configureLog",
"version": { "major": 1, "minor": 0 },
"path": "/path/to/top-level-build-dir/CMakeFiles/CMakeConfigureLog.yaml",
"eventKindNames": [ "try_compile-v1", "try_run-v1" ]
}
configureLog 对象特有的成员是
path指定配置日志文件路径的字符串。客户端必须从该路径读取日志文件,该路径可能与
cmake-configure-log(7)记录的路径不同。如果没有记录任何事件,日志文件可能不存在。eventKindNames一个 JSON 数组,其条目均为命名
cmake-configure-log(7)版本化事件类型的 JSON 字符串。每种配置日志事件类型最多列出一个版本。虽然配置日志可能包含其他(版本化)事件类型,但客户端必须忽略未在此字段中列出的那些。
对象类型 "cache"¶
cache 对象类型列出缓存条目。这些是存储在构建树持久缓存 (CMakeCache.txt) 中的 变量。
仅有一个 cache 对象主版本,即版本 2。版本 1 不存在,以避免与 cmake-server(7) 模式下的缓存混淆。
4.1 版本新增:cache 对象类型回复由 此 JSON 模式 以机器可读形式描述。
"cache" 版本 2¶
cache 对象版本 2 是一个 JSON 对象
{
"kind": "cache",
"version": { "major": 2, "minor": 0 },
"entries": [
{
"name": "BUILD_SHARED_LIBS",
"value": "ON",
"type": "BOOL",
"properties": [
{
"name": "HELPSTRING",
"value": "Build shared libraries"
}
]
},
{
"name": "CMAKE_GENERATOR",
"value": "Unix Makefiles",
"type": "INTERNAL",
"properties": [
{
"name": "HELPSTRING",
"value": "Name of generator."
}
]
}
]
}
cache 对象特有的成员是
entries一个 JSON 数组,其条目均为指定缓存条目的 JSON 对象。每个条目的成员为
名称指定条目名称的字符串。
value指定条目值的字符串。
type指定由
cmake-gui(1)用于选择编辑小部件的条目类型的字符串。属性指定关联 缓存条目属性 的条目 JSON 数组。每个条目都是一个包含成员的 JSON 对象
名称指定缓存条目属性名称的字符串。
value指定缓存条目属性值的字符串。
对象类型 "cmakeFiles"¶
cmakeFiles 对象类型列出了 CMake 在配置和生成构建系统时使用的文件。这些包括 CMakeLists.txt 文件以及包含的 .cmake 文件。
仅有一个 cmakeFiles 对象主版本,即版本 1。
4.1 版本新增:cmakeFiles 对象类型回复由 此 JSON 模式 以机器可读形式描述。
"cmakeFiles" 版本 1¶
cmakeFiles 对象版本 1 是一个 JSON 对象
{
"kind": "cmakeFiles",
"version": { "major": 1, "minor": 1 },
"paths": {
"build": "/path/to/top-level-build-dir",
"source": "/path/to/top-level-source-dir"
},
"inputs": [
{
"path": "CMakeLists.txt"
},
{
"isGenerated": true,
"path": "/path/to/top-level-build-dir/.../CMakeSystem.cmake"
},
{
"isExternal": true,
"path": "/path/to/external/third-party/module.cmake"
},
{
"isCMake": true,
"isExternal": true,
"path": "/path/to/cmake/Modules/CMakeGenericSystem.cmake"
}
],
"globsDependent": [
{
"expression": "src/*.cxx",
"recurse": true,
"files": [
"src/foo.cxx",
"src/bar.cxx"
]
}
]
}
cmakeFiles 对象特有的成员是
paths包含以下成员的 JSON 对象
源指定顶层源目录绝对路径的字符串(用正斜杠表示)。
构建指定顶层构建目录绝对路径的字符串(用正斜杠表示)。
inputs一个 JSON 数组,其条目均为指定 CMake 在配置和生成构建系统时使用的输入文件的 JSON 对象。每个条目的成员为
path指定 CMake 输入文件路径的字符串,以正斜杠表示。如果文件位于顶级源目录内,则路径相对于该目录指定。否则,路径为绝对路径。
isGenerated可选成员,如果路径指定的文件位于顶级构建目录之下且构建是源外(out-of-source)构建,则存在且布尔值为
true。此成员在源内(in-source)构建中不可用。isExternal可选成员,如果路径指定的文件不在顶级源或构建目录之下,则存在且布尔值为
true。isCMake可选成员,如果路径指定了 CMake 安装中的文件,则存在且布尔值为
true。
globsDependent可选成员,当项目使用
CONFIGURE_DEPENDS选项调用file(GLOB)或file(GLOB_RECURSE)时出现。其值为 JSON 对象数组,每个对象指定一个 glob 表达式及与其匹配的路径列表。如果 glob 表达式不再匹配相同的路径列表,CMake 会认为构建系统已过期。此字段添加于
cmakeFiles1.1 版本。每个条目的成员为
expression指定 glob 表达式的字符串。
recurse可选成员,如果条目对应于
file(GLOB_RECURSE)调用,则存在且布尔值为true。否则,条目对应于file(GLOB)调用。listDirectories可选成员,如果
file(GLOB)在没有LIST_DIRECTORIES false的情况下调用,或者file(GLOB_RECURSE)在有LIST_DIRECTORIES true的情况下调用,则存在且布尔值为true。followSymlinks可选成员,如果
file(GLOB)使用了FOLLOW_SYMLINKS选项调用,则存在且布尔值为true。relative可选成员,如果
file(GLOB)使用了RELATIVE <path>选项调用,则存在。其值为包含所给定<path>的字符串。paths列出由
file(GLOB)或file(GLOB_RECURSE)调用匹配的路径的 JSON 字符串数组。
对象类型 "toolchains"¶
toolchains 对象类型列出了构建期间使用的工具链属性。这些包括语言、编译器路径、ID 和版本。
仅有一个 toolchains 对象主版本,即版本 1。
4.1 版本新增:toolchains 对象类型回复由 此 JSON 模式 以机器可读形式描述。
"toolchains" 版本 1¶
toolchains 对象版本 1 是一个 JSON 对象
{
"kind": "toolchains",
"version": { "major": 1, "minor": 1 },
"toolchains": [
{
"language": "C",
"compiler": {
"path": "/usr/bin/cc",
"commandFragment": "--config x86_64-linux-gnu.cfg",
"id": "GNU",
"version": "9.3.0",
"implicit": {
"includeDirectories": [
"/usr/lib/gcc/x86_64-linux-gnu/9/include",
"/usr/local/include",
"/usr/include/x86_64-linux-gnu",
"/usr/include"
],
"linkDirectories": [
"/usr/lib/gcc/x86_64-linux-gnu/9",
"/usr/lib/x86_64-linux-gnu",
"/usr/lib",
"/lib/x86_64-linux-gnu",
"/lib"
],
"linkFrameworkDirectories": [],
"linkLibraries": [ "gcc", "gcc_s", "c", "gcc", "gcc_s" ]
}
},
"sourceFileExtensions": [ "c", "m" ]
},
{
"language": "CXX",
"compiler": {
"path": "/usr/bin/c++",
"id": "GNU",
"version": "9.3.0",
"implicit": {
"includeDirectories": [
"/usr/include/c++/9",
"/usr/include/x86_64-linux-gnu/c++/9",
"/usr/include/c++/9/backward",
"/usr/lib/gcc/x86_64-linux-gnu/9/include",
"/usr/local/include",
"/usr/include/x86_64-linux-gnu",
"/usr/include"
],
"linkDirectories": [
"/usr/lib/gcc/x86_64-linux-gnu/9",
"/usr/lib/x86_64-linux-gnu",
"/usr/lib",
"/lib/x86_64-linux-gnu",
"/lib"
],
"linkFrameworkDirectories": [],
"linkLibraries": [
"stdc++", "m", "gcc_s", "gcc", "c", "gcc_s", "gcc"
]
}
},
"sourceFileExtensions": [
"C", "M", "c++", "cc", "cpp", "cxx", "mm", "CPP"
]
}
]
}
toolchains 对象特有的成员是
toolchains一个 JSON 数组,其条目均为指定与特定语言相关联的工具链的 JSON 对象。每个条目的成员为
language指定工具链语言(如 C 或 CXX)的 JSON 字符串。语言名称与可以传递给
project()命令的语言名称相同。因为 CMake 每种语言仅支持一个工具链,所以此字段可以用作键。compiler包含以下成员的 JSON 对象
path可选成员,当为当前语言定义了
CMAKE_<LANG>_COMPILER变量时出现。其值是包含编译器路径的 JSON 字符串。commandFragment可选成员,当
CMAKE_<LANG>_COMPILER变量是包含多个元素的列表,或者CC或类似环境变量在编译器可执行文件后包含命令行参数时出现。其值是以命令行片段形式包含后续元素(编译器必需参数)的 JSON 字符串。此字段添加于 toolchains 1.1 版本。
id可选成员,当为当前语言定义了
CMAKE_<LANG>_COMPILER_ID变量时出现。其值是包含编译器 ID (GNU, MSVC 等) 的 JSON 字符串。版本可选成员,当为当前语言定义了
CMAKE_<LANG>_COMPILER_VERSION变量时出现。其值是包含编译器版本的 JSON 字符串。目标可选成员,当为当前语言定义了
CMAKE_<LANG>_COMPILER_TARGET变量时出现。其值是包含编译器交叉编译目标的 JSON 字符串。implicit包含以下成员的 JSON 对象
includeDirectories可选成员,当为当前语言定义了
CMAKE_<LANG>_IMPLICIT_INCLUDE_DIRECTORIES变量时出现。其值是一个 JSON 字符串数组,其中每个字符串包含编译器隐式包含目录的路径。linkDirectories可选成员,当为当前语言定义了
CMAKE_<LANG>_IMPLICIT_LINK_DIRECTORIES变量时出现。其值是一个 JSON 字符串数组,其中每个字符串包含编译器隐式链接目录的路径。linkFrameworkDirectories可选成员,当为当前语言定义了
CMAKE_<LANG>_IMPLICIT_LINK_FRAMEWORK_DIRECTORIES变量时出现。其值是一个 JSON 字符串数组,其中每个字符串包含编译器隐式链接框架目录的路径。linkLibraries可选成员,当为当前语言定义了
CMAKE_<LANG>_IMPLICIT_LINK_LIBRARIES变量时出现。其值是一个 JSON 字符串数组,其中每个字符串包含编译器隐式链接库的路径。
sourceFileExtensions可选成员,当为当前语言定义了
CMAKE_<LANG>_SOURCE_FILE_EXTENSIONS变量时出现。其值是一个 JSON 字符串数组,其中每个字符串包含该语言的文件扩展名(不带前导点)。