cmake-file-api(7)¶
简介¶
CMake 提供了文件 API,供客户端获取 CMake 生成构建系统语义信息。客户端可以使用此 API 将查询文件写入到构建树中的特定位置,以请求一个或多个对象类型 (Object Kinds)。当 CMake 在该构建树中生成构建系统时,它会读取查询文件,并为客户端写入答复文件。
基于文件的 API 使用构建树顶部的 <build>/.cmake/api/
目录。此 API 是版本化的,以支持 API 目录内文件布局的更改。API 文件布局版本控制与 Object Kinds 答复中使用的版本控制是正交的。此版本 CMake 仅支持一个 API 版本 (API v1)。
3.27 版本中新增:项目也可以使用 cmake_file_api()
命令来提交当前运行的查询。
API v1¶
API v1 位于 <build>/.cmake/api/v1/
目录中。它有以下子目录
query/
保存客户端写入的查询文件。可以是 v1 共享无状态查询文件、v1 客户端无状态查询文件 或 v1 客户端有状态查询文件。
reply/
保存 CMake 在运行生成构建系统时写入的答复文件。可以通过 v1 答复索引文件 索引这些文件,该文件可能引用其他 v1 答复文件。CMake 拥有所有答复文件。客户端不得删除这些文件。
客户端可以随时查找并读取回复索引文件。客户端可以随时创建
reply/
目录(如果尚未创建),并监控此目录是否出现新的回复索引文件。
版本 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 不必要地生成多个对象版本。
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": {}
}
成员包括:
请求
包含零个或多个请求的 JSON 数组。每个请求都是一个 JSON 对象,包含成员:
种类
指定回复中将包含的 对象类型 之一。
版本
指示客户端理解的对象类型的版本。版本遵循语义版本惯例,包含主版本和次要版本组件。该值必须为:
指定(非负)主版本号的 JSON 整数,或
包含
major
(主版本)和(可选)minor
(次要版本)成员、指定非负整数版本组件的 JSON 对象,或元素中每个都是以上元素之一的 JSON 数组。
客户端
为客户端使用而保留的可选成员。此值保留在 v1 回复索引文件 中为客户端编写的回复中,但在其他情况下将被忽略。客户端可以使用此值通过请求传递定制信息到其回复。
对于每个请求的对象类型,CMake 将在请求中列出的版本中选择它识别的第一个版本。响应将使用选中主版本与运行的 CMake 针对该主版本已知的最高次要版本。因此,客户端应按优先顺序列出所有受支持的主版本,以及每个主版本所需的最低次要版本。
客户端
为客户端使用而保留的可选成员。此值保留在 v1 回复索引文件 中为客户端编写的回复中,但在其他情况下将被忽略。客户端可以使用此值通过查询传递定制信息到其回复。
其他 query.json
顶级成员为将来使用而保留。如果出现,它们将被忽略以保持向前兼容性。
v1 回复索引文件¶
CMake 在每次运行以生成构建系统时,都会将 index-*.json
文件写入 v1/reply/
目录。客户端必须首先读取回复索引文件,并且只能通过遵循引用读取其他 v1 回复文件。回复索引文件名称的格式为:
<build>/.cmake/api/v1/reply/index-<unspecified>.json
其中 index-
为文本,<unspecified>
是由 CMake 选定的未指定名称。每当生成一个新索引文件时,都会为它指定一个新名称,并删除任何旧名称。在执行这些步骤之间的短时间内,可能有多个索引文件;按词典顺序名称最大的文件是当前索引文件。
回复索引文件包含一个 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
一个包含有关生成响应的 CMake 实例信息的 JSON 对象。它包含以下成员
版本
一个指定 CMake 版本的 JSON 对象,成员有
major
、minor
、patch
指定主要版本、次要版本和补丁版本组件的整数值。
suffix
一个指定版本后缀(如果有)的字符串,例如
g0abc3
。string
一个指定以下格式的完整版本的字符串:
<major>.<minor>.<patch>[-<suffix>]
。isDirty
一个布尔值,指示版本是否由带本地修改版本控制的源代码树构建。
paths
用于指定 CMake 附带内容路径的 JSON 对象。它对 cmake、ctest 和 cpack 具有成员,其值均为 JSON 字符串,用于指定每个工具的绝对路径,该路径将使用正斜杠来表示。它还有一个
root
成员,表示包含 CMake 资源(如Modules/
目录)的目录的绝对路径(请参见CMAKE_ROOT
)。generator
一个描述用于构建的 CMake 生成器的 JSON 对象。它具有以下成员
multiConfig
一个布尔值,指定生成器是否支持多个输出配置。
name
一个指定生成器名称的字符串。
platform
如果生成器支持
CMAKE_GENERATOR_PLATFORM
,则这是一个指定生成器平台名称的字符串。
objects
reply
对 CMake 加载来生成响应的
query/
目录的内容进行镜像的 JSON 对象。成员的格式为<kind>-v<major>
此表单的一个成员出现在 v1 共享无状态查询文件 中,CMake 将其识别为请求对象种类的 major 版本
<kind>
为<major>
。该值是一个 v1 响应文件引用,用于该对象种类和版本的相应响应文件。<unknown>
此表单的一个成员出现在 v1 共享无状态查询文件 中,CMake 无法识别它们。该值是一个 JSON 对象,它包含单个
error
成员,其中包含一个字符串,其文本包含一条错误消息,说明查询文件未知。client-<client>
此表单的成员对每个 holding v1 客户端无状态查询文件 的客户端所有目录出现一次。该值是一个 JSON 对象,镜像
query/client-<client>/
目录的内容。成员的格式如下<kind>-v<major>
此表单的成员对每个 v1 客户端无状态查询文件 出现一次,该文件为 CMake 识别的对象类型
<kind>
的请求,主版本为<major>
。该值是一个 v1 回复文件引用,指向该对象类型和版本的相应回复文件。<unknown>
此表单的成员对每个 v1 客户端无状态查询文件 出现一次,该文件未被 CMake 识别。该值是一个 JSON 对象,包含一个
error
成员,其包含一个字符串,其中带有错误消息,指示该查询文件未知。query.json
此成员对使用 v1 客户端有状态查询文件 的客户端出现。如果
query.json
文件无法作为 JSON 对象读取或解析,则此成员是一个 JSON 对象,包含一个error
成员,其包含一个字符串,其中带有错误消息。否则,此成员是一个 JSON 对象,镜像query.json
文件的内容。成员如下客户端
如果有,
query.json
文件client
成员的副本。请求
如果有,
query.json
文件requests
成员的副本。responses
如果
query.json
文件requests
成员缺失或无效,则此成员是一个 JSON 对象,包含一个error
成员,其包含一个字符串,其中带有错误消息。否则,此成员包含一个 JSON 数组,其中包含对requests
数组的每个条目的响应,顺序相同。每个响应为包含一个
error
成员的 JSON 对象,其包含一个字符串,其中带有错误消息,或一个 v1 回复文件引用,指向所请求的对象类型和所选版本的相应回复文件。
读取回复索引文件后,客户端可能读取其引用的其他 v1 回复文件。
有关对象类型的详细信息,请参阅 对象类型 部分。
种类
回复索引文件使用具有成员的 JSON 对象来表示对其他回复文件的每个引用
版本
指定某个 对象类型 的字符串。
一个 JSON 对象,其成员
major
和minor
指定对象类型的主版本组件。jsonFile
一个 JSON 字符串,指定相对于回复索引文件的路径,以指向包含该对象的另一个 JSON 文件。
包含特定 对象种类的 回复文件由 CMake 编写。这些文件的文件名不指定,且不能由客户端进行解释。客户端必须先读取 v1 回复索引文件,然后根据引用查找所需的响应对象的文件名。
回复文件(包括索引文件)永远不会被具有相同名称但内容不同的文件替换。这样可以让客户端与正在生成新回复的 CMake 并发读取这些文件。然而,在生成新回复后,CMake 会尝试移除不是它刚刚写入的上个运行所生成的回复文件。如果客户端尝试读取索引中引用的回复文件,但发现文件丢失,这意味着一个并发的 CMake 已生成一个新回复。客户端只需读取新的回复索引文件即可重新开始。
对象种类¶
基于 CMake 文件的 API 使用以下 JSON 对象的类型来报告有关构建系统的语义信息。每种类型的对象使用带有主要和次要组件的语义版本控制独立进行版本控制。每种类型的对象都具有以下形式
{
"kind": "<kind>",
"version": { "major": 1, "minor": 0 },
"...": {}
}
kind
成员是一个指定对象类型名称的字符串。 version
成员是一个 JSON 对象,其中 major
和 minor
成员指定对象类型版本的整数组件。其他顶级成员则特定于每种对象类型。
对象类型“codemodel”¶
codemodel
对象类型描述了 CMake 建模的构建系统结构。
只有一个 codemodel
对象主版本(版本 2)。不存在版本 1,以免与 cmake-server(7)
模式混淆。
对象类型“codemodel”版本 2¶
codemodel
对象版本 2 是一个 JSON 对象
{
"kind": "codemodel",
"version": { "major": 2, "minor": 7 },
"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 ],
"hasInstallRule": true,
"minimumCMakeVersion": {
"string": "3.14"
},
"jsonFile": "<file>"
},
{
"source": "sub",
"build": "sub",
"parentIndex": 0,
"projectIndex": 0,
"targetIndexes": [ 1 ],
"minimumCMakeVersion": {
"string": "3.14"
},
"jsonFile": "<file>"
}
],
"projects": [
{
"name": "MyProject",
"directoryIndexes": [ 0, 1 ],
"targetIndexes": [ 0, 1 ]
}
],
"targets": [
{
"name": "MyExecutable",
"directoryIndex": 0,
"projectIndex": 0,
"jsonFile": "<file>"
},
{
"name": "MyLibrary",
"directoryIndex": 1,
"projectIndex": 0,
"jsonFile": "<file>"
}
]
}
]
}
codemodel
对象特有的成员有
paths
包含以下成员的 JSON 对象
source
一个指定顶层源目录的绝对路径的字符串,使用正斜杠表示。
build
一个指定顶层构建目录的绝对路径的字符串,使用正斜杠表示。
configurations
一个 JSON 数组,其条目对应于可用的构建配置。在单配置生成器中有
CMAKE_BUILD_TYPE
变量的值的一个条目。对于多配置生成器,CMAKE_CONFIGURATION_TYPES
变量中列出的每个配置都有一个条目。每个条目都是一个 JSON 对象,包含以下成员:name
一个字符串,指定配置的名称,例如
Debug
。directories
与包含
CMakeLists.txt
文件的构建系统目录相对应的每个条目的 JSON 数组。首个条目对应于顶层目录。每个条目都是一个包含成员的 JSON 对象source
指定源目录路径的字符串,用正斜杠表示。如果目录位于顶层源目录中,则相对该目录指定路径(顶层源目录本身为
.
)。否则路径为绝对路径。build
指定构建目录路径的字符串,用正斜杠表示。如果目录位于顶层构建目录中,则相对该目录指定路径(顶层构建目录本身为
.
)。否则路径为绝对路径。parentIndex
目录不是顶层目录时存在的可选成员。该值是主
directories
数组中另一个条目的 0 基无符号整数索引,该条目对应于将此目录添加为子目录的父目录。childIndexes
目录具有子目录时存在的可选成员。该值是与通过
add_subdirectory()
或subdirs()
命令创建的子目录对应的条目的 JSON 数组。每个条目都是主directories
数组中另一个条目的 0 基无符号整数索引。projectIndex
指向主
projects
数组的 0 基无符号整数索引,指示此目录所属的构建系统项目。targetIndexes
目录本身具有目标时存在的可选成员,不包括属于子目录的目标。该值是与目标对应的条目的 JSON 数组。每个条目都是主
targets
数组的 0 基无符号整数索引。minimumCMakeVersion
当目录要求的最小 CMake 版本时存在的可选成员。这是给定目录自身或其某个祖先中对
cmake_minimum_required(VERSION)
命令的最本地调用的<min>
版本。该值是一个具有一个成员的 JSON 对象string
指定最小要求版本的字符串,格式为
<major>.<minor>[.<patch>[.<tweak>]][<suffix>]
每个分量都是无符号整数,后缀可以是任意字符串。
hasInstallRule
目录或其一个子目录包含任何
install()
规则时存在的可选成员,具有布尔值true
,即是否有make install
或等效规则可用。一个 JSON 对象,其成员
major
和minor
指定对象类型的主版本组件。指定相对于代码模型文件的路径的 JSON 字符串,指向包含 “codemodel” 版本 2 “directory” 对象 的另一个 JSON 文件。
该字段在 codemodel 版本 2.3 中添加。
projects
一个 JSON 数组项对应于构建系统中定义的顶级项目和子项目。每个(子)项目都对应于一个源目录,该目录的
CMakeLists.txt
文件调用具有不同于其父目录的项目名称的project()
命令。第一个条目对应于顶级项目。每个条目都是包含成员的 JSON 对象
name
指定给
project()
命令的字符串。parentIndex
在项目不是顶级时出现的可选成员。值是主要
projects
数组中另一个条目的无符号整数(以 0 为基数的索引),该条目对应于将此项目作为子项目添加的父项目。childIndexes
在项目有子项目时出现的可选成员。值是与子项目相对应的条目的 JSON 数组。每个条目都是主
projects
数组中另一个条目的无符号整数(以 0 为基数的索引)。directoryIndexes
与属于项目的构建系统目录相对应的条目的 JSON 数组。第一个条目对应于项目的顶级目录。每个条目都是主要
directories
数组中的无符号整数(以 0 为基数的索引)。targetIndexes
在项目本身有目标(不包括属于子项目的那些)时出现的可选成员。值是与目标相对应的条目的 JSON 数组。每个条目都是主
targets
数组中的无符号整数(以 0 为基数的索引)。
targets
与构建系统目标相对应的条目的 JSON 数组。此类目标是通过调用
add_executable()
、add_library()
和add_custom_target()
创建的(不包括导入的目标和接口库,它们不生成任何构建规则)。每个条目都是包含成员的 JSON 对象name
指定目标名称的字符串。
id
唯一标识目标的字符串。这与
jsonFile
引用的文件中的id
对应。directoryIndex
主
directories
数组中的无符号整数(以 0 为基数的索引),指示定义目标的构建系统目录。projectIndex
主
projects
数组中的无符号整数(以 0 为基数的索引),指示定义目标的构建系统项目。一个 JSON 对象,其成员
major
和minor
指定对象类型的主版本组件。一个 JSON 字符串,指定相对于 codemodel 文件的路径,通往包含 “codemodel” 版本 2 “target” 对象 的另一个 JSON 文件。
“codemodel” 版本 2 “目录” 对象¶
一个 Codemodel“目录”对象 是由一个 Codemodel 版本 2 对象的 directories
数组来引用的。每一个“目录”对象都是一个具有以下成员的 JSON 对象
paths
包含以下成员的 JSON 对象
source
指定源目录路径的字符串,用正斜杠表示。如果目录位于顶层源目录中,则相对该目录指定路径(顶层源目录本身为
.
)。否则路径为绝对路径。build
指定构建目录路径的字符串,用正斜杠表示。如果目录位于顶层构建目录中,则相对该目录指定路径(顶层构建目录本身为
.
)。否则路径为绝对路径。
installers
一个 JSON 数组,它包含与
install()
规则相对应的条目。每个条目都是一个包含以下成员的 JSON 对象component
一个指定由相应的
install()
命令调用所选择的组件的字符串。destination
可选成员,存在于以下特定
type
值。paths
可选成员,存在于以下特定
type
值。该值是一个 JSON 数组,它包含与要安装的路径(文件或目录)相对应的条目。每个条目都是以下之一指定要从中安装文件或目录的路径的字符串。以
/
为前缀的路径的一部分还指定要将文件或目录安装到的路径(名称),它位于目标位置之下。一个具有以下成员的 JSON 对象
from
指定要从中安装文件或目录的路径的字符串。
to
指定要将文件或目录安装到的路径的字符串,它位于目标位置之下。
在这两种情况下,路径都用正斜杠表示。如果“from”路径位于由相应的
type
值记录的最顶层目录内,则该路径相对于该目录指定。否则该路径是绝对的。type
指定安装规则类型的字符串。该值是以下之一,一些变量提供其他成员
file
一个
install(FILES)
或install(PROGRAMS)
调用。填充destination
和paths
成员,最顶层源目录下的路径与它相对。可能存在isOptional
成员。此类型没有其他成员。directory
install(DIRECTORY)
调用。destination
和paths
成员已填充,顶级 source 目录下的路径相对于它表示。isOptional
成员可能存在。此类型没有其他成员。target
install(TARGETS)
调用。destination
和paths
成员已填充,顶级 build 目录下的路径相对于它表示。isOptional
成员可能存在。此类型有其他成员targetId
、targetIndex
、targetIsImportLibrary
和targetInstallNamelink
。export
install(EXPORT)
调用。destination
和paths
成员已填充,顶级 build 目录下的路径相对于它表示。paths
条目引用 CMake 自动生成的用于安装的文件,其实际值被认为是私有实现细节。此类型有其他成员exportName
和exportTargets
。script
install(SCRIPT)
调用。此类型有其他成员scriptFile
。code
install(CODE)
调用。此类型没有其他成员。importedRuntimeArtifacts
install(IMPORTED_RUNTIME_ARTIFACTS)
调用。destination
成员已填充。isOptional
成员可能存在。此类型没有其他成员。runtimeDependencySet
install(RUNTIME_DEPENDENCY_SET)
调用或install(TARGETS)
调用与RUNTIME_DEPENDENCIES
。destination
成员已填充。此类型有其他成员runtimeDependencySetName
和runtimeDependencySetType
。fileSet
一个带有
FILE_SET
的install(TARGETS)
调用。填充了destination
和paths
成员。isOptional
成员可能存在。此类型有附加成员fileSetName
、fileSetType
、fileSetDirectories
和fileSetTarget
。此类型在 2.4 版 codemodel 中已添加。
isExcludeFromAll
当使用
EXCLUDE_FROM_ALL
选项调用install()
时,显示的可选成员,布尔值为true
。isForAllComponents
当使用
ALL_COMPONENTS
选项调用install(SCRIPT|CODE)
时,显示的可选成员,布尔值为true
。isOptional
当使用
OPTIONAL
选项调用install()
时,显示的可选成员,布尔值为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>
的 genex 计算确定)的字符串列表。此字段在 codemodel 版本 2.4 中已添加。
fileSetTarget
当
type
为fileSet
时存在的可选成员。该值为包含成员的 JSON 对象id
唯一地标识目标的字符串。此字符串匹配主“codemodel”对象的
targets
数组中目标的id
成员。索引
主“codemodel”对象的
targets
数组中目标的无符号整型 0 基索引。
此字段在 codemodel 版本 2.4 中已添加。
scriptFile
当
type
为script
时存在的可选成员。该值为指定磁盘上脚本文件的路径(用正斜杠表示)的字符串。如果文件位于顶级源目录中,则路径相对于该目录指定。否则,路径为绝对路径。backtrace
当从添加此安装程序的
install()
或其他命令调用可获取 CMake 语言回溯时存在的可选成员。该值为backtraceGraph
成员的nodes
数组中以 0 为基准的无符号整数索引。
backtraceGraph
“codemodel” 2 版“回溯图”,其节点在“目录”对象的其他位置从
backtrace
成员引用。
“codemodel” 2 版“目标”¶
“codemodel” 2 版 对象的 targets
数组中引用了 codemodel “target” 对象。每个“target”对象都是一个 JSON 对象,包含成员
name
指定目标逻辑名称的字符串。
id
唯一标识该目标的字符串。格式未指定,且客户端不应对此格式进行解释。
type
指定目标类型的字符串。该值之一为
EXECUTABLE
、STATIC_LIBRARY
、SHARED_LIBRARY
、MODULE_LIBRARY
、OBJECT_LIBRARY
、INTERFACE_LIBRARY
或UTILITY
。backtrace
当 CMake 语言回溯到创建目标源代码中的命令时,当前的可选成员可用。该值是一个无符号整数 0 基索引,位于
backtraceGraph
成员的nodes
数组中。folder
当
FOLDER
目标属性被设置时,当前的可选成员可用。该值是一个带有单个成员的 JSON 对象name
指定目标文件夹名称的字符串。
paths
包含以下成员的 JSON 对象
source
指定目标源目录路径的字符串,使用正斜杠表示。如果目录位于顶级源目录内部,则该路径相对于该目录指定(顶级源目录本身为
.
)。否则路径是绝对的。build
指定目标构建目录路径的字符串,使用正斜杠表示。如果目录位于顶级构建目录内部,则该路径相对于该目录指定(顶级构建目录本身为
.
)。否则路径是绝对的。
nameOnDisk
对于链接或归档到单个主要工件的可执行文件和库目标,当前的可选成员可用。该值是一个字符串,指定磁盘上该工件的文件名。
artifacts
对于生成磁盘上工件的可执行文件和库目标,当前的可选成员可用,这些工件用于被依赖项使用。该值是一个 JSON 数组,包含与工件对应的项。每个项都是一个包含一个成员的 JSON 对象
path
指定磁盘上文件路径的字符串,使用正斜杠表示。如果文件位于顶级构建目录内部,则该路径相对于该目录指定。否则路径是绝对的。
isGeneratorProvided
如果目标是由 CMake 的构建系统生成器而不是源代码中的命令提供的,则当前的可选成员带有布尔值
true
。install
当目标有
install()
规则时,当前的可选成员可用。该值是一个带有成员的 JSON 对象prefix
指定安装前缀的 JSON 对象。它有一个成员
path
指定
CMAKE_INSTALL_PREFIX
值的字符串。
destinations
指定安装目标路径的 JSON 数组项。每个项都是一个带有成员的 JSON 对象
path
指定安装目标路径的字符串。该路径可以是绝对路径,也可以相对于安装前缀。
backtrace
当指定此目标的
install()
命令调用中存在 CMake 语言回溯时,可选成员将出现。该值是backtraceGraph
成员的nodes
数组中基于 0 的无符号整数索引。
启动程序
在项目中指定了至少一个启动程序的可执行目标上出现的可选成员。其值是与指定启动程序相对应的条目 JSON 数组。每个条目都是一个带有成员的 JSON 对象
命令
一个字符串,指定磁盘上启动程序的路径,用正斜杠表示。如果文件位于顶层源目录中,则路径相对于该目录指定。
自变量
当启动程序命令在要启动的可执行文件之前有参数时出现的可选成员。其值是表示参数的字符串 JSON 数组。
type
用于指定启动程序类型的字符串。其值是以下值之一
模拟器
交叉编译时的目标平台模拟器。请参阅
CROSSCOMPILING_EMULATOR
目标属性。测试
测试执行的启动程序。请参阅
TEST_LAUNCHER
目标属性。
此字段已添加至 codemodel 2.7 版本中。
链接
链接到运行时二进制文件的可执行文件和共享库目标的可选成员。其值是描述链接步骤的 JSON 对象,且带有成员
语言
一个字符串,指定用于调用链接器的是工具链的语言(例如
C
、CXX
和Fortran
)。命令片段
当存在链接命令行调用的片段时出现的可选成员。其值是指定有序片段的条目 JSON 数组。每个条目都是一个带有成员的 JSON 对象
片段
一个字符串,指定链接命令行调用的片段。其值在构建系统的本机 shell 格式中编码。
角色
一个字符串,指定片段内容的角色
标志
:链接标志。库
:链接库文件路径或标志。库路径
:库搜索路径标志。框架路径
:macOS 框架搜索路径标志。
链接时优化
当启用链接时优化(也称为过程间优化或链接时代码生成)时,带有布尔值
true
的可选成员。根系统
在
CMAKE_SYSROOT_LINK
或CMAKE_SYSROOT
变量定义时存在的可选成员。该值是一个包含一个成员的 JSON 对象path
指定到 sysroot 的绝对路径的字符串,用正斜杠表示。
归档
对于静态库目标存在的可选成员。该值是一个包含描述归档步骤的成员的 JSON 对象
命令片段
在归档器命令行调用的碎片可用时存在的可选成员。该值是一个指定碎片的 JSON 数组的条目。每个条目都是一个 JSON 对象,包含成员
片段
指定归档器命令行调用碎片的字符串。该值使用构建系统的本机 shell 格式进行编码。
角色
一个字符串,指定片段内容的角色
flags
: 归档器标志。
链接时优化
当启用链接时优化(也称为过程间优化或链接时代码生成)时,带有布尔值
true
的可选成员。
依赖
当目标依赖于其他目标时存在的可选成员。该值是一个 JSON 数组的条目对应于依赖项。每个条目都是一个 JSON 对象,包含成员
id
唯一标识此目标所依赖的目标的字符串。这与其他目标的 main
id
成员相匹配。backtrace
当到
add_dependencies()
、target_link_libraries()
或创建此依赖项的其他命令调用的 CMake 语言回溯可用时存在的可选成员。该值是一个无符号整数 0 基于到backtraceGraph
成员的nodes
数组的索引。
文件集
对应于目标文件集的 JSON 数组的条目。每个条目都是一个 JSON 对象,包含成员
name
指定文件集名称的字符串。
type
指定文件集类型的字符串。参见
target_sources()
支持的文件集类型。可见性
指定文件集可见性的字符串;
PUBLIC
、PRIVATE
或INTERFACE
中的一个。基本目录
一个字符串 JSON 数组,每个字符串指定一个包含文件集中的源的基本目录。如果目录位于顶级源目录内,则路径相对于该目录指定。否则路径是绝对路径。
此字段在 codemodel 版本 2.5 中添加。
源
对应于目标源文件的 JSON 数组的条目。每个条目都是一个 JSON 对象,包含成员
path
一个字符串,指定磁盘上源文件路径,用正斜杠表示。如果文件在顶级源目录中,则路径相对于该目录指定。否则,路径是绝对的。
compileGroupIndex
编译源文件时出现的可选成员。该值是不带符号的 0 基索引,指向
compileGroups
数组。sourceGroupIndex
通过
source_group()
命令或默认方式成为源组一部分时,出现的可选成员。该值是不带符号的 0 基索引,指向sourceGroups
数组。isGenerated
如果源是
GENERATED
,则带有布尔值true
的可选成员。fileSetIndex
源是文件组一部分时出现的可选成员。该值是不带符号的 0 基索引,指向
fileSets
数组。此字段在 codemodel 版本 2.5 中添加。
backtrace
当到
target_sources()
、add_executable()
、add_library()
、add_custom_target()
或添加此源到目标的其他命令调用的 CMake 语言回溯时出现的可选成员。该值是不带符号的 0 基索引,指向backtraceGraph
成员的nodes
数组。
sourceGroups
通过
source_group()
命令或默认方式将源分组在一起时出现的可选成员。该值是与组相应的条目的 JSON 数组。每个条目都是一个 JSON 对象,其成员为name
指定组名称的字符串。
sourceIndexes
列出属于该组的源的 JSON 数组。每个条目都是无符号的 0 基索引,指向目标的主
sources
数组。
compileGroups
目标有可编译源时存在的可选成员。值是一个 JSON 数组,其中包含对应于使用相同设置编译的所有源的组的条目。每个条目是一个带有成员的 JSON 对象:
sourceIndexes
列出属于该组的源的 JSON 数组。每个条目都是无符号的 0 基索引,指向目标的主
sources
数组。语言
指定工具链语言的字符串(例如
C
、CXX
、Fortran
)用于编译源文件。languageStandard
当语言标准显式设置(例如通过
CXX_STANDARD
)或编译功能隐式设置时存在的可选成员。每个条目是一个带有两个成员的 JSON 对象:backtraces
当 CMake 语言回溯到
<LANG>_STANDARD
设置时存在的可选成员。如果语言标准是由编译功能隐式设置的,则这些功能将用作回溯。多个编译功能可能需要相同的语言标准,因此可能存在多个回溯。该值是一个 JSON 数组,每个条目都是一个无符号整数的 0 基于索引,该索引进入backtraceGraph
成员的nodes
数组。standard
表示语言标准的字符串。
此字段已添加到 codemodel 版本 2.2 中。
compileCommandFragments
当编译器命令行调用的片段可用时存在的可选成员。值是一个 JSON 数组,其中包含指定有序片段的条目。每个条目是一个带有成员的 JSON 对象:
片段
指定编译器命令行调用片段的字符串。值在构建系统的本机 shell 格式中进行编码。
includes
当存在 include 目录时存在的可选成员。值是一个 JSON 数组,其中为每个目录提供一个条目。每个条目是一个带有成员的 JSON 对象:
path
指定 include 目录的路径的字符串,用正斜杠表示。
isSystem
当 include 目录被标记为系统 include 目录时存在的可选成员,布尔值
true
。backtrace
当 CMake 语言回溯到
target_include_directories()
或添加此 include 目录的其他命令调用时存在的可选成员。值是一个无符号整数的 0 基于索引,该索引进入backtraceGraph
成员的nodes
数组。
frameworks
当在 Apple 平台上存在框架时存在的可选成员。值是一个 JSON 数组,其中为每个目录提供一个条目。每个条目是一个带有成员的 JSON 对象:
path
指定框架目录的路径的字符串,用正斜杠表示。
isSystem
当框架被标记为系统框架时存在的可选成员,布尔值
true
。backtrace
当 CMake 语言回溯到
target_link_libraries()
或添加此框架的其他命令调用时存在的可选成员。值是一个无符号整数的 0 基于索引,该索引进入backtraceGraph
成员的nodes
数组。
此字段已添加到 codemodel 版本 2.6 中。
precompileHeaders
当
target_precompile_headers()
或其他命令调用在目标上设置PRECOMPILE_HEADERS
时存在的可选成员。该值是一个 JSON 数组,其中每项对应一个头。每项都是一个 JSON 对象,该对象具有以下成员header
预编译头文件的完整路径。
backtrace
当查找
target_precompile_headers()
或其他添加此预编译标头命令调用时的 CMake 语言回溯时存在的可选成员,并且该变量可用。该值是一个无符号的基于 0 的整数索引,指向backtraceGraph
成员的nodes
数组。
在 codemodel 2.1 版中添加了此字段。
defines
当存在预处理器定义时存在的可选成员。该值是一个 JSON 数组,其中每项对应一个定义。每项都是一个 JSON 对象,该对象具有以下成员
define
使用
<name>[=<value>]
格式指定预处理器定义的字符串,例如DEF
或DEF=1
。backtrace
当查找
target_compile_definitions()
或其他添加此预处理器定义命令调用时的 CMake 语言回溯时存在的可选成员。该值是一个无符号的基于 0 的整数索引,指向backtraceGraph
成员的nodes
数组。
根系统
当
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
一个无符号的基于 0 的整数索引,指向回溯
files
数组。line
当该节点表示文件中的某一行时存在的可选成员。该值是一个无符号的基于 1 的行号。
命令
当节点表示文件中的命令调用时,可选择性成员。该值是一个无符号整数,索引到回溯
commands
阵列的 0 为基数。parent
当节点不是调用堆栈底部时,可选择性成员。该值是一个无符号整数,索引到回溯
nodes
阵列的另一个条目的 0 为基数。
commands
罗列回溯节点引用的命令名称的 JSON 阵列。每个条目都用一个指定命令名称的字符串。
files
罗列回溯节点引用的 CMake 语言文件的 JSON 阵列。每个条目都用一个指定文件路径的字符串,用正斜杠表示。如果文件位于顶级源目录中,则路径相对于该目录指定。否则路径是绝对的。
对象种类“configureLog”¶
configureLog
对象种类描述 cmake-configure-log(7)
文件的位置和内容。
仅有一个 configureLog
对象主版本,版本 1。
“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
logPath
指定到 configure 日志文件路径的字符串。客户端必须从此路径读取日志文件,该路径可能不同于
cmake-configure-log(7)
中记录的路径。如果没有记录事件,日志文件可能不存在。eventKindNames
每个条目都是一个 JSON 字符串,命名 cmake-configure-log(7)
版本事件种类之一的 JSON 阵列。最多将会列出每个 configure 日志事件种类的其中一个版本。尽管 configure 日志可能包含其他(版本)事件种类,客户端必须忽略未列在此字段中的这些事件种类。
cache
对象种类列出缓存条目。这些是存储在生成树的持久缓存 (CMakeCache.txt
) 中的 变量。
仅有一个 cache
对象主版本,版本 2。版本 1 不存在,以避免与 cmake-server(7)
模式中的版本混淆。
缓存
对象版本 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."
}
]
}
]
}
特定于缓存
对象的成员包括
条目
JSON 数组,其中的每个条目都是一个 JSON 对象,用于指定缓存条目。每个条目的成员包括
name
指定条目名称的字符串。
值
指定条目值的字符串。
type
指定
cmake-gui(1)
用于选择用于编辑的小组件的条目类型的字符串。属性
指定关联的缓存条目属性的条目的 JSON 数组。每个条目都是一个包含成员的 JSON 对象
name
指定缓存条目属性名称的字符串。
值
指定缓存条目属性值的字符串。
对象类型“cmakeFiles”¶
cmakeFiles
对象类型列出在 CMake 配置和生成构建系统时使用的文件。其中包括CMakeLists.txt
文件以及已包含的.cmake
文件。
仅有一个cmakeFiles
对象主版本,版本 1。
“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 对象
source
一个指定顶层源目录的绝对路径的字符串,使用正斜杠表示。
build
一个指定顶层构建目录的绝对路径的字符串,使用正斜杠表示。
输入
JSON 数组,其中的每个条目都是一个 JSON 对象,用于指定 CMake 在配置和生成构建系统时使用的输入文件。每个条目的成员包括
path
指定到 CMake 输入文件的路径的字符串,用正斜杠表示。如果文件位于顶层源目录内,则相对于该目录指定路径。否则,路径是绝对路径。
isGenerated
如果路径指定了位于顶层构建目录下且构建为非源内构建的文件,则存在可选成员,其中布尔值
true
。此成员在源内构建中不可用。isExternal
如果路径指定了不位于顶层源目录或构建目录下的文件,则存在可选成员,其中布尔值
true
。pisCMake
如果路径指定了 CMake 安装中的文件,则存在可选成员,其中布尔值
true
。
globsDependent
当项目调用
file(GLOB)
或file(GLOB_RECURSE)
含CONFIGURE_DEPENDS
选项时,呈现此可选成员。该值是 JSON 对象的 JSON 数组,分别指定一个全局匹配表达式及其匹配的路径列表。如果全局匹配表达式不再匹配相同的路径列表,则 CMake 认为构建系统已过期。此字段已在
cmakeFiles
版本 1.1 中添加。每个条目的成员包括:
表达式
指定全局匹配表达式的字符串。
递归
如果此条目对应
file(GLOB_RECURSE)
调用,则呈现此布尔值true
的可选成员。否则,此条目对应file(GLOB)
调用。列出目录
如果未调用
LIST_DIRECTORIES false
,或在LIST_DIRECTORIES true
中调用file(GLOB)
,则呈现此布尔值true
的可选成员file(GLOB_RECURSE)
。关注符号链接
如果使用
FOLLOW_SYMLINKS
选项调用file(GLOB)
,则呈现此布尔值true
的可选成员。相对
如果使用
RELATIVE <path>
选项调用file(GLOB)
,则呈现此可选成员。该值是一个字符串,包含给定的<path>
。paths
指定调用
file(GLOB)
或file(GLOB_RECURSE)
所匹配路径的字符串的 JSON 数组。
对象类型 "toolchains"¶
toolchains
对象类型会列出构建期间所用工具链的属性。其中包括语言、编译器路径、ID 和版本。
仅有一个 toolchains
对象主版本,版本 1。
版本 1 的 "toolchains"¶
版本 1 的 toolchains
对象是一个 JSON 对象
{
"kind": "toolchains",
"version": { "major": 1, "minor": 0 },
"toolchains": [
{
"language": "C",
"compiler": {
"path": "/usr/bin/cc",
"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 数组,指定与特定语言关联的工具链。每个条目的成员为
语言
指定工具链语言的 JSON 字符串,如 C 或 CXX。语言名称与可以传递给
project()
命令的语言名称相同。由于 CMake 仅支持每种语言的单个工具链,因此此字段可以用作键。compiler
包含以下成员的 JSON 对象
path
当
CMAKE_<LANG>_COMPILER
变量对当前语言已定义时存在的可选成员。其值为包含编译器路径的 JSON 字符串。id
当
CMAKE_<LANG>_COMPILER_ID
变量对当前语言已定义时存在的可选成员。其值为包含编译器 ID(GNU、MSVC 等)的 JSON 字符串。版本
当
CMAKE_<LANG>_COMPILER_VERSION
变量对当前语言已定义时存在的可选成员。其值为包含编译器版本的 JSON 字符串。target
当
CMAKE_<LANG>_COMPILER_TARGET
变量对当前语言已定义时存在的可选成员。其值为包含编译器的交叉编译目标的 JSON 字符串。implicit
包含以下成员的 JSON 对象
includeDirectories
当
CMAKE_<LANG>_IMPLICIT_INCLUDE_DIRECTORIES
变量对当前语言已定义时存在的可选成员。其值为 JSON 字符串的 JSON 数组,其中每个字符串都包含编译器的隐式包含目录路径。linkDirectories
当
CMAKE_<LANG>_IMPLICIT_LINK_DIRECTORIES
变量对当前语言已定义时存在的可选成员。其值为 JSON 字符串的 JSON 数组,其中每个字符串都包含编译器的隐式链接目录路径。linkFrameworkDirectories
在为当前语言定义了
CMAKE_<LANG>_IMPLICIT_LINK_FRAMEWORK_DIRECTORIES
变量时,此选项成员才会出现。其值是 JSON 字符串的 JSON 数组,其中每个字符串保存一条指向编译器隐式链接框架目录的路径。linkLibraries
在为当前语言定义了
CMAKE_<LANG>_IMPLICIT_LINK_LIBRARIES
变量时,此选项成员才会出现。其值是 JSON 字符串的 JSON 数组,其中每个字符串保存一条指向编译器隐式链接库的路径。
sourceFileExtensions
在为当前语言定义了
CMAKE_<LANG>_SOURCE_FILE_EXTENSIONS
变量时,此选项成员才会出现。其值是 JSON 字符串的 JSON 数组,其中每个字符串保存一个此语言的文件扩展名(不含前导点)。