cmake-file-api(7)

简介

CMake 提供了一个基于文件的 API,客户端可以使用它来获取 CMake 生成的构建系统的语义信息。客户端可以通过在构建树的特定位置写入查询文件来请求零个或多个 对象类型。当 CMake 在该构建树中生成构建系统时,它会读取查询文件并为客户端写入回复文件以供读取。

基于文件的 API 在构建树的顶层使用 `/.cmake/api/` 目录。API 是版本化的,以支持 API 目录内文件布局的变化。API 文件布局版本与回复中使用的 对象类型 的版本是正交的。此版本的 CMake 只支持一个 API 版本,即 API v1

版本 3.27 中添加: 项目还可以使用 cmake_file_api() 命令提交当前运行的查询。

API v1

API v1 位于 `/.cmake/api/v1/` 目录中。它有以下子目录:

query/

存放客户端写入的查询文件。这些可以是 v1 共享无状态查询文件v1 客户端无状态查询文件v1 客户端有状态查询文件

reply/

存放 CMake 在生成构建系统时写入的回复文件。客户端只能在回复索引引用时读取回复文件。

index-*.json

CMake 生成构建系统时写入的 v1 回复索引文件

error-*.json

在 4.1 版本中新增。

CMake 由于错误无法生成构建系统时写入的 v1 回复错误索引

客户端可以随时查找和读取回复索引。客户端可以选择在任何时候创建 `reply/` 目录并监视它,以发现新回复索引的出现。CMake 拥有所有回复文件。客户端绝不能删除它们。

版本 3.31 中添加: 用户可以将查询文件添加到 `CMAKE_CONFIG_DIR 中的 `api/v1/query` 来为所有 CMake 项目创建用户级别的查询。

v1 共享无状态查询文件

共享无状态查询文件允许客户端共享对 对象类型 主要版本的请求,并获取 CMake 运行识别的所有请求版本。

客户端可以通过在 `v1/query/` 目录中创建空文件来创建共享请求。格式为:

<build>/.cmake/api/v1/query/<kind>-v<major>

其中 `` 是 对象类型 之一,`-v` 是字面量,`` 是主要版本号。

此格式的文件是任何特定客户端都不拥有的无状态共享查询。创建后,不应在未进行外部客户端协调或人工干预的情况下删除它们。

v1 客户端无状态查询文件

客户端无状态查询文件允许客户端创建对其拥有的 对象类型 主要版本的请求,并获取 CMake 运行识别的所有请求版本。

客户端可以通过在客户端特定的查询子目录中创建空文件来创建对其拥有的请求。格式为:

<build>/.cmake/api/v1/query/client-<client>/<kind>-v<major>

其中 `client-` 是字面量,`` 是唯一标识客户端的字符串,`` 是 对象类型 之一,`-v` 是字面量,`` 是主要版本号。每个客户端必须通过自己的方式选择唯一的 `` 标识符。

此格式的文件是属于客户端 `` 的无状态查询。拥有客户端可以随时删除它们。

v1 客户端有状态查询文件

有状态查询文件允许客户端请求每个 对象类型 的版本列表,并只获取 CMake 运行识别的最新版本。

客户端可以通过在客户端特定的查询子目录中创建 `query.json` 文件来创建对其拥有的有状态查询。格式为:

<build>/.cmake/api/v1/query/client-<client>/query.json

其中 `client-` 是字面量,`` 是唯一标识客户端的字符串,`query.json` 是字面量。每个客户端必须通过自己的方式选择唯一的 `` 标识符。

`query.json` 文件是属于客户端 `` 的有状态查询。拥有客户端可以随时更新或删除它们。当给定客户端安装更新时,它可以更新它写入构建树的有状态查询,以请求更新的对象版本。这可以用来避免不必要地要求 CMake 生成多个对象版本。

版本 4.1 中添加: `query.json` 文件由 此JSON schema 以机器可读的形式描述。

`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-` 是字面量,`` 是 CMake 选择的未指定名称。每当生成新的索引文件时,都会给它一个新名称,并删除任何旧的。在这些步骤之间很短的时间内,可能存在多个索引文件;按字典顺序名称最大的那个是当前索引文件。

版本 4.1 中添加: 回复索引文件由 此JSON schema 以机器可读的形式描述。

回复索引文件包含一个 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 实例的信息。它包含以下成员:

版本

一个 JSON 对象,指定 CMake 的版本,包含以下成员:

major, minor, patch

指定主版本、次版本和补丁版本组件的整数值。

suffix

一个字符串,指定版本后缀(如果存在),例如 `g0abc3`。

string

一个字符串,以 `..[-]` 的格式指定完整版本。

isDirty

一个布尔值,指示版本是否从带有本地修改的版本控制源树构建。

paths

一个 JSON 对象,指定 CMake 附带内容的路径。它包含 `cmake`、`ctest` 和 `cpack` 的成员,其值是指定每个工具的绝对路径的 JSON 字符串,以正斜杠表示。它还包含一个 `root` 成员,指向包含 CMake 资源的目录的绝对路径,例如 `Modules/` 目录(请参见 CMAKE_ROOT)。

generator

一个 JSON 对象,描述用于构建的 CMake 生成器。它包含以下成员:

multiConfig

一个布尔值,指定生成器是否支持多配置输出。

名称

一个字符串,指定生成器的名称。

platform

如果生成器支持 CMAKE_GENERATOR_PLATFORM,则这是一个指定生成器平台名称的字符串。

objects

一个 JSON 数组,列出作为回复一部分生成的所有 对象类型 的所有版本。每个数组条目都是一个 v1 回复文件引用

reply

一个 JSON 对象,镜像 CMake 加载以生成回复的 `query/` 目录的内容。成员的格式为:

<kind>-v<major>

对于 CMake 识别的每个 v1 共享无状态查询文件(请求对象类型 `` 和主版本 ``),都会出现一个此格式的成员。其值是:

<unknown>

对于 CMake 未识别的每个 v1 共享无状态查询文件,都会出现一个此格式的成员。其值是一个只包含 `error` 成员(值为指示查询文件未知的错误消息字符串)的 JSON 对象。

client-<client>

对于每个包含 v1 客户端无状态查询文件 的客户端拥有的目录,都会出现一个此格式的成员。其值是一个镜像 `query/client-/` 目录内容的 JSON 对象。成员的格式为:

<kind>-v<major>

对于 CMake 识别的每个 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 对象来表示对另一个回复文件的每个引用:

种类

一个字符串,指定 对象类型 之一。

版本

一个 JSON 对象,包含 `major` 和 `minor` 成员,指定对象类型的整数版本组件。

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` 成员是一个 JSON 对象,包含 `major` 和 `minor` 成员,指定对象类型版本的整数组件。其他顶层成员特定于每种对象类型。

对象类型 "codemodel"

`codemodel` 对象类型描述了 CMake 建模的构建系统结构。

只有一个 `codemodel` 对象主版本,即版本 2。版本 1 不存在,以避免与 cmake-server(7) 模式中的版本混淆。

版本 4.1 中添加: `codemodel` 对象类型回复由 此JSON schema 以机器可读的形式描述。

"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

当目录不是顶层目录时存在的可选成员。该值是一个无符号整数,0-based 索引,指向主 `directories` 数组中的另一个条目,该条目对应于将此目录添加为子目录的父目录。

childIndexes

当目录具有子目录时存在的可选成员。该值是一个 JSON 数组,包含对应于由 `add_subdirectory() 或 `subdirs() 命令创建的子目录的条目。每个条目都是一个无符号整数,0-based 索引,指向主 `directories` 数组中的另一个条目。

projectIndex

一个无符号整数,0-based 索引,指向主 `projects` 数组,表示此目录所属的构建系统项目。

targetIndexes

当目录本身具有构建系统目标(不包括子目录中的目标)时存在的可选成员。该值是一个 JSON 数组,包含对应于构建系统目标的条目。每个条目都是一个无符号整数,0-based 索引,指向主 `targets` 数组。

abstractTargetIndexes

当目录本身具有抽象目标(不包括子目录中的目标)时存在的可选成员。该值是一个 JSON 数组,包含对应于抽象目标的条目。每个条目都是一个无符号整数,0-based 索引,指向主 `abstractTargets` 数组。

此字段在 codemodel 版本 2.9 中添加。

minimumCMakeVersion

当知道目录所需的最低 CMake 版本时存在的可选成员。这是该目录本身或其祖先中最近一次调用 `cmake_minimum_required(VERSION) 命令时提供的 `` 版本。该值是一个 JSON 对象,带有一个成员:

string

一个字符串,指定最低要求的版本,格式为:

<major>.<minor>[.<patch>[.<tweak>]][<suffix>]

每个组件都是一个无符号整数,后缀可以是任意字符串。

hasInstallRule

当目录或其子目录包含任何 `install() 规则时(即是否可用 `make install` 或等效规则)存在的可选成员,布尔值为 `true`。

jsonFile

一个 JSON 字符串,指定相对于 codemodel 文件的路径,指向另一个包含 `"codemodel" version 2 "directory" object` 的 JSON 文件。

此字段在 codemodel 版本 2.3 中添加。

projects

一个 JSON 数组,包含对应于构建系统中的顶层项目和子项目的条目。每个(子)项目对应一个源目录,其 `CMakeLists.txt` 文件调用 `project() 命令,并且项目名称与其父目录不同。第一个条目对应顶层项目。

每个条目都是一个 JSON 对象,包含以下成员:

名称

一个字符串,指定传递给 `project() 命令的名称。

parentIndex

当项目不是顶层项目时存在的可选成员。该值是一个无符号整数,0-based 索引,指向主 `projects` 数组中的另一个条目,该条目对应于将此项目添加为子项目的父项目。

childIndexes

当项目有子项目时存在的可选成员。该值是一个 JSON 数组,包含对应于子项目的条目。每个条目都是一个无符号整数,0-based 索引,指向主 `projects` 数组中的另一个条目。

directoryIndexes

一个 JSON 数组,包含对应于属于该项目的构建系统目录的条目。第一个条目对应项目的顶层目录。每个条目都是一个无符号整数,0-based 索引,指向主 `directories` 数组。

targetIndexes

当项目本身具有构建系统目标(不包括子项目中的目标)时存在的可选成员。该值是一个 JSON 数组,包含对应于构建系统目标的条目。每个条目都是一个无符号整数,0-based 索引,指向主 `targets` 数组。

abstractTargetIndexes

当项目本身具有抽象目标(不包括子项目中的目标)时存在的可选成员。该值是一个 JSON 数组,包含对应于抽象目标的条目。每个条目都是一个无符号整数,0-based 索引,指向主 `abstractTargets` 数组。

此字段在 codemodel 版本 2.9 中添加。

targets

一个 JSON 数组,包含对应于构建系统目标的条目。这些目标通过调用 `add_executable()、`add_library() 和 `add_custom_target() 创建,不包括导入目标和不生成任何构建规则的接口库。每个条目都是一个 JSON 对象,包含以下成员:

名称

一个字符串,指定目标的名称。

id

一个唯一标识目标的字符串。这与 `jsonFile` 引用的文件中的 `id` 字段匹配。

directoryIndex

一个无符号整数,0-based 索引,指向主 `directories` 数组,表示目标定义的构建系统目录。

projectIndex

一个无符号整数,0-based 索引,指向主 `projects` 数组,表示目标定义的构建系统项目。

jsonFile

一个 JSON 字符串,指定相对于 codemodel 文件的路径,指向另一个包含 `"codemodel" version 2 "target" object` 的 JSON 文件。

abstractTargets

一个 JSON 数组,包含对应于构建系统中不存在的目标的条目。这些是导入目标或通过调用 `add_executable() 或 `add_library() 创建的接口库。对于接口库,只有不参与构建系统的才包含在此数组中。参与构建系统的接口库将包含在 `targets` 数组中。

每个条目都是一个 JSON 对象,包含以下成员:

名称

一个字符串,指定目标的名称。

id

一个唯一标识目标的字符串。这与 `jsonFile` 引用的文件中的 `id` 字段匹配。

directoryIndex

一个无符号整数,0-based 索引,指向主 `directories` 数组,表示目标定义的构建系统目录。

projectIndex

一个无符号整数,0-based 索引,指向主 `projects` 数组,表示目标定义的构建系统项目。

jsonFile

一个 JSON 字符串,指定相对于 codemodel 文件的路径,指向另一个包含 `"codemodel" version 2 "target" object` 的 JSON 文件。

此字段在 codemodel 版本 2.9 中添加。

"codemodel" 版本 2 "directory" 对象

版本 4.1 中添加: `directory` 对象回复由 此JSON schema 以机器可读的形式描述。

codemodel "directory" 对象通过 `"codemodel" version 2` 对象的 `directories` 数组引用。每个 "directory" 对象是一个 JSON 对象,包含以下成员:

codemodelVersion

这指定了该文件所属的 codemodel 版本。它将匹配引用此文件的 codemodel 对象类型的 `version` 字段。它是一个 JSON 对象,包含以下成员:

主要版本

codemodel 主版本。

次要版本

codemodel 次版本。

此字段在 codemodel 版本 2.9 中添加。

paths

一个 JSON 对象,包含以下成员:

一个字符串,指定源目录的路径,以正斜杠表示。如果目录位于顶层源目录内,则路径相对于该目录(对于顶层源目录本身,使用 `.`)。否则,路径是绝对的。

构建

一个字符串,指定构建目录的路径,以正斜杠表示。如果目录位于顶层构建目录内,则路径相对于该目录(对于顶层构建目录本身,使用 `.`)。否则,路径是绝对的。

installers

一个 JSON 数组,包含对应于 `install() 规则的条目。每个条目都是一个 JSON 对象,包含以下成员:

component

一个字符串,指定对应 `install() 命令调用选择的组件。

destination

当 `type` 为以下某些值时存在的可选成员。该值是一个字符串,指定安装目标路径。路径可以是绝对的,也可以是相对于安装前缀的。

paths

当 `type` 为以下某些值时存在的可选成员。该值是一个 JSON 数组,包含对应要安装的路径(文件或目录)的条目。每个条目是以下之一:

  • 一个字符串,指定要安装的文件或目录的路径。路径中不以 `/` 开头的部分也指定了该文件或目录在目标下的路径(名称)。

  • 一个 JSON 对象,包含以下成员:

    from

    一个字符串,指定要安装的文件或目录的路径。

    一个字符串,指定该文件或目录在目标下安装到的路径。

在这两种情况下,路径都以正斜杠表示。如果 "from" 路径位于由相应 `type` 值文档化的顶层目录内,则路径相对于该目录指定。否则,路径是绝对的。

type

一个字符串,指定安装规则的类型。该值是以下之一,其中一些变体提供其他成员:

file

一个 `install(FILES) 或 `install(PROGRAMS) 调用。`destination` 和 `paths` 成员会被填充,其中顶层*源*目录下的路径相对于它指定。`isOptional` 成员可能存在。此类型没有其他成员。

directory

一个 `install(DIRECTORY) 调用。`destination` 和 `paths` 成员会被填充,其中顶层*源*目录下的路径相对于它指定。`isOptional` 成员可能存在。此类型没有其他成员。

目标

一个 `install(TARGETS) 调用。`destination` 和 `paths` 成员会被填充,其中顶层*构建*目录下的路径相对于它指定。`isOptional` 成员可能存在。此类型有额外的成员 `targetId`、`targetIndex`、`targetIsImportLibrary` 和 `targetInstallNamelink`。

export

一个 `install(EXPORT) 调用。`destination` 和 `paths` 成员会被填充,其中顶层*构建*目录下的路径相对于它指定。`paths` 条目指向 CMake 为安装自动生成的文件,其实际值被视为私有实现细节。此类型有额外的成员 `exportName` 和 `exportTargets`。

script

一个 `install(SCRIPT) 调用。此类型有额外的成员 `scriptFile`。

code

一个 `install(CODE) 调用。此类型没有其他成员。

importedRuntimeArtifacts

一个 `install(IMPORTED_RUNTIME_ARTIFACTS) 调用。`destination` 成员会被填充。`isOptional` 成员可能存在。此类型没有其他成员。

runtimeDependencySet

一个 `install(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` 时存在的可选成员。该值是一个无符号整数,0-based 索引,指向主 "codemodel" 对象 `targets` 数组中要安装的目标。

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` 成员。

索引

一个无符号整数,0-based 索引,指向主 "codemodel" 对象 `targets` 数组中的目标。

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` 成员。

索引

一个无符号整数,0-based 索引,指向主 "codemodel" 对象 `targets` 数组中的目标。

此字段在 codemodel 版本 2.4 中添加。

cxxModuleBmiTarget

当 `type` 为 `cxxModuleBmi` 时存在的可选成员。该值是一个 JSON 对象,包含以下成员:

id

一个字符串,唯一标识目标。这匹配主 "codemodel" 对象 `targets` 数组中目标的 `id` 成员。

索引

一个无符号整数,0-based 索引,指向主 "codemodel" 对象 `targets` 数组中的目标。

此字段在 codemodel 版本 2.5 中添加。

scriptFile

当 `type` 为 `script` 时存在的可选成员。该值是一个字符串,指定磁盘上脚本文件的路径,以正斜杠表示。如果文件位于顶层源目录内,则路径相对于该目录指定。否则,路径是绝对的。

回溯

当存在指向 `install() 或添加此安装程序的其他命令调用的 CMake 语言回溯时存在的可选成员。该值是一个无符号整数,0-based 索引,指向 `backtraceGraph` 成员的 `nodes` 数组。

backtraceGraph

一个 `"codemodel" version 2 "backtrace graph"`,其节点由此 "directory" 对象中的其他 `backtrace` 成员引用。

"codemodel" 版本 2 "target" 对象

版本 4.1 中添加: `target` 对象回复由 此JSON schema 以机器可读的形式描述。

codemodel "target" 对象通过 `"codemodel" version 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 语言回溯时存在的可选成员。该值是一个无符号整数,0-based 索引,指向 `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-based 索引,指向 `backtraceGraph` 成员的 `nodes` 数组。

launchers

当可执行目标具有项目指定的至少一个启动器时存在的可选成员。该值是一个 JSON 数组,包含对应于指定启动器的条目。每个条目都是一个 JSON 对象,包含以下成员:

命令

一个字符串,指定磁盘上启动器的路径,以正斜杠表示。如果文件位于顶层源目录内,则路径相对于该目录指定。

arguments

当启动器命令具有位于要启动的可执行文件之前的参数时存在的可选成员。该值是一个字符串数组,表示参数。

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-based 索引,指向 `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 Generators` 中也将存在此成员。

此字段在 codemodel 版本 2.8 中添加。

dependencies

可选成员,当目标依赖于其他目标时存在。只有当目标是构建系统的一部分时,它才存在。导入的目标不属于构建系统。接口库仅当它们具有源文件或文件集时才属于构建系统。

值为一个 JSON 数组,其中包含对应于构建依赖项的条目。该数组不仅包括直接依赖项,还包括传递依赖项。所有列出的目标都将在本目标之前构建。

依赖项列表反映的是构建图依赖项,不一定反映链接依赖项。如果静态库的链接依赖项中存在循环,则并非所有链接依赖项都会在此构建图依赖项列表中反映出来。

每个条目是一个 JSON 对象,包含以下成员:

id

一个字符串,唯一标识目标所依赖的目标。这与另一个目标的 id 主成员匹配。

回溯

可选成员,当存在到 add_dependencies()target_link_libraries() 或创建此依赖项的其他命令调用的 CMake 语言回溯时存在。其值为 backtraceGraph 成员的 nodes 数组中的一个 0 基无符号整数索引。

linkLibraries

可选成员,当目标直接链接到一个或多个其他目标或库时可能存在。它包含链接此目标时使用的项。这些项来自目标的 LINK_LIBRARIES 属性(非传递性求值),或者它直接或传递链接到的另一个目标的 INTERFACE_LINK_LIBRARIES_DIRECT 属性。

仅作为使用需求应用的项(例如被包装在 $<COMPILE_ONLY:...> 表达式中)不会在此成员中出现。

值为一个 JSON 数组条目。每个条目都是一个 JSON 对象,包含以下成员:

id

可选成员,当要链接的库是目标时存在。它唯一标识目标,此目标与该目标有直接链接关系。这与该其他目标的 id 主成员匹配。

id 标识的目标不一定属于构建系统。它可能是一个导入的目标,或者是一个没有源文件或文件集接口库。

永远会有一个 idfragment 成员存在。

fragment

可选成员,当要链接的库不是目标时存在。它是一个字符串,包含原始链接器命令行参数,这些参数捕获了该关系。通常,这些将通过名称链接到库或框架,而不是作为目标。

永远会有一个 idfragment 成员存在。

回溯

可选成员,当存在到创建此关系的命令调用的 CMake 语言回溯时存在。其值为 backtraceGraph 成员的 nodes 数组中的一个 0 基无符号整数索引。

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 标识的目标不一定属于构建系统。它可能是一个导入的目标,或者是一个没有源文件或文件集接口库。

永远会有一个 idfragment 成员存在。

fragment

可选成员,当要链接的接口库不是目标时存在。它是一个字符串,包含将应用于此目标接口链接库消费者的原始链接器命令行参数。通常,这些将是链接到库或框架的链接器参数,而不是作为目标。

永远会有一个 idfragment 成员存在。

回溯

可选成员,当存在到创建此接口关系的命令调用的 CMake 语言回溯时存在。其值为 backtraceGraph 成员的 nodes 数组中的一个 0 基无符号整数索引。

此字段在 codemodel 版本 2.9 中添加。

compileDependencies

可选成员,当目标直接链接到一个或多个可能向其提供使用需求的其他目标时可能存在。它们会影响此目标的源文件的编译方式。这些关系由目标的 LINK_LIBRARIES 属性(非传递性求值)以及它直接或传递链接到的其他目标的 INTERFACE_LINK_LIBRARIES_DIRECT 属性定义。

仅应用链接需求的(例如被包装在 $<LINK_ONLY:...> 表达式中)关系不会在此成员中出现。

值为一个 JSON 数组条目。每个条目都是一个 JSON 对象,包含以下成员:

id

一个字符串,唯一标识此目标直接依赖的目标。这与另一个目标的 id 主成员匹配。

id 标识的目标不一定属于构建系统。它可能是一个导入的目标,或者是一个没有源文件或文件集接口库。

回溯

可选成员,当存在到创建此关系的命令调用的 CMake 语言回溯时存在。其值为 backtraceGraph 成员的 nodes 数组中的一个 0 基无符号整数索引。

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 语言回溯时存在。其值为 backtraceGraph 成员的 nodes 数组中的一个 0 基无符号整数索引。

此字段在 codemodel 版本 2.9 中添加。

objectDependencies

可选成员,当目标的 SOURCES 属性中有一个或多个条目,且条目是通过 $<TARGET_OBJECTS:...> 指定的,并且 $<TARGET_OBJECTS:...> 表达式中未使用其他生成器表达式时存在。

值为一个 JSON 数组条目。每个条目都是一个 JSON 对象,包含以下成员:

id

一个字符串,唯一标识 $<TARGET_OBJECTS:...> 表达式中引用的对象的那个目标。这与该其他目标的 id 主成员匹配。

回溯

可选成员,当存在到创建此依赖项的命令调用的 CMake 语言回溯时存在。其值为 backtraceGraph 成员的 nodes 数组中的一个 0 基无符号整数索引。

此字段在 codemodel 版本 2.9 中添加。

orderDependencies

可选成员,当目标有一个或多个直接顺序依赖于其他目标时存在。此类依赖项可能源于调用 add_dependencies() 或 CMake 内部处理。与 dependencies 数组不同,ZERO_CHECK 目标不会包含在 orderDependencies 中(这仅与 XcodeVisual Studio 生成器相关)。

值为一个 JSON 数组条目。每个条目都是一个 JSON 对象,包含以下成员:

id

一个字符串,唯一标识目标所依赖的目标。这与另一个目标的 id 主成员匹配。

回溯

可选成员,当存在到创建此依赖项的命令调用的 CMake 语言回溯时存在。其值为 backtraceGraph 成员的 nodes 数组中的一个 0 基无符号整数索引。

此字段在 codemodel 版本 2.9 中添加。

fileSets

一个可选成员,当目标定义了一个或多个文件集时存在。其值为一个 JSON 数组,包含对应于目标文件集的条目。每个条目都是一个 JSON 对象,包含以下成员:

名称

一个字符串,指定文件集的名称。

type

一个字符串,指定文件集的类型。参见 target_sources() 支持的文件集类型。

visibility

一个字符串,指定文件集的可见性;值为 PUBLICPRIVATEINTERFACE 之一。

baseDirectories

一个 JSON 数组字符串,每个字符串指定一个包含文件集源的基目录。如果目录位于顶层源目录内,则路径相对于该目录指定。否则,路径是绝对路径。

此字段在 codemodel 版本 2.5 中添加。

sources

一个 JSON 数组,包含对应于目标源文件的条目。每个条目都是一个 JSON 对象,包含以下成员:

path

一个字符串,指定源文件在磁盘上的路径,使用正斜杠表示。如果文件位于顶层源目录内,则路径相对于该目录指定。否则,路径是绝对路径。

compileGroupIndex

可选成员,当源文件被编译时存在。其值为 compileGroups 数组中的一个 0 基无符号整数索引。

sourceGroupIndex

可选成员,当源文件是源组的一部分时存在,无论是通过 source_group() 命令还是默认生成的。其值为 sourceGroups 数组中的一个 0 基无符号整数索引。

isGenerated

可选成员,当源文件被标记为 GENERATED 时,以布尔值 true 存在。

fileSetIndex

可选成员,当源文件是文件集的一部分时存在。其值为 fileSets 数组中的一个 0 基无符号整数索引。

此字段在 codemodel 版本 2.5 中添加。

回溯

可选成员,当存在到 target_sources()add_executable()add_library()add_custom_target() 或其他将此源添加到目标的命令调用的 CMake 语言回溯时存在。其值为 backtraceGraph 成员的 nodes 数组中的一个 0 基无符号整数索引。

sourceGroups

可选成员,当源文件通过 source_group() 命令或默认分组时存在。其值为一个 JSON 数组,包含对应于组的条目。每个条目都是一个 JSON 对象,包含以下成员:

名称

一个字符串,指定源组的名称。

sourceIndexes

一个 JSON 数组,列出属于该组的源。每个条目都是一个 0 基无符号整数索引,指向目标主 sources 数组。

compileGroups

可选成员,当目标有正在编译的源时存在。其值为一个 JSON 数组,包含对应于具有相同设置编译的所有源文件组的条目。每个条目都是一个 JSON 对象,包含以下成员:

sourceIndexes

一个 JSON 数组,列出属于该组的源。每个条目都是一个 0 基无符号整数索引,指向目标主 sources 数组。

language

一个字符串,指定用于编译源文件的工具链语言(例如 CCXXFortran)。

languageStandard

可选成员,当语言标准被显式设置(例如通过 CXX_STANDARD)或隐式通过编译功能设置时存在。每个条目都是一个 JSON 对象,包含两个成员:

backtraces

可选成员,当存在到 <LANG>_STANDARD 设置的 CMake 语言回溯时存在。如果语言标准是隐式通过编译功能设置的,则使用这些编译功能作为回溯。多个编译功能可能需要相同的语言标准,因此可能存在多个回溯。其值为一个 JSON 数组,每个条目都是 backtraceGraph 成员的 nodes 数组中的一个 0 基无符号整数索引。

standard

一个字符串,表示语言标准。

此字段已在 codemodel 版本 2.2 中添加。

compileCommandFragments

可选成员,当编译器命令行调用的片段可用时存在。其值为一个 JSON 数组,包含指定有序片段的条目。每个条目都是一个 JSON 对象,带有一个成员:

fragment

一个字符串,指定编译器命令行调用的一部分。该值以构建系统的原生 shell 格式编码。

回溯

可选成员,当存在到添加此片段的命令调用的 CMake 语言回溯时存在。其值为 backtraceGraph 成员的 nodes 数组中的一个 0 基无符号整数索引。

includes

可选成员,当存在包含目录时存在。其值为一个 JSON 数组,每个目录有一个条目。每个条目都是一个 JSON 对象,包含以下成员:

path

一个字符串,指定包含目录的路径,使用正斜杠表示。

isSystem

可选成员,当包含目录被标记为系统包含目录时,以布尔值 true 存在。

回溯

可选成员,当存在到 target_include_directories() 或其他将此包含目录添加到目标的命令调用的 CMake 语言回溯时存在。其值为 backtraceGraph 成员的 nodes 数组中的一个 0 基无符号整数索引。

frameworks

可选成员,当在 Apple 平台上存在框架时存在。其值为一个 JSON 数组,每个目录有一个条目。每个条目都是一个 JSON 对象,包含以下成员:

path

一个字符串,指定框架目录的路径,使用正斜杠表示。

isSystem

可选成员,当框架被标记为系统框架时,以布尔值 true 存在。

回溯

可选成员,当存在到 target_link_libraries() 或其他将此框架添加到目标的命令调用的 CMake 语言回溯时存在。其值为 backtraceGraph 成员的 nodes 数组中的一个 0 基无符号整数索引。

此字段已在 codemodel 版本 2.6 中添加。

precompileHeaders

可选成员,当 target_precompile_headers() 或其他命令调用在目标上设置了 PRECOMPILE_HEADERS 时存在。其值为一个 JSON 数组,每个头文件有一个条目。每个条目都是一个 JSON 对象,包含以下成员:

header

预编译头文件的完整路径。

回溯

可选成员,当存在到 target_precompile_headers() 或其他将此预编译头文件添加到目标的命令调用的 CMake 语言回溯时存在。其值为 backtraceGraph 成员的 nodes 数组中的一个 0 基无符号整数索引。

此字段已在 codemodel 版本 2.1 中添加。

defines

可选成员,当存在预处理器定义时存在。其值为一个 JSON 数组,每个定义有一个条目。每个条目都是一个 JSON 对象,包含以下成员:

define

一个字符串,指定预处理器定义的格式为 <name>[=<value>],例如 DEFDEF=1

回溯

可选成员,当存在到 target_compile_definitions() 或其他将此预处理器定义添加到目标的命令调用的 CMake 语言回溯时存在。其值为 backtraceGraph 成员的 nodes 数组中的一个 0 基无符号整数索引。

sysroot

可选成员,当定义了 CMAKE_SYSROOT_COMPILECMAKE_SYSROOT 变量时存在。其值为一个 JSON 对象,带有一个成员:

path

一个字符串,指定 sysroot 的绝对路径,以正斜杠表示。

backtraceGraph

一个“codemodel” version 2 “backtrace graph”,其节点被引用自此“target”对象其他地方的 backtrace 成员。

“codemodel” version 2 “backtrace graph”

backtraceGraph 成员,位于 “codemodel” version 2 “directory” object“codemodel” version 2 “target” object 中,是一个描述回溯图的 JSON 对象。其节点被引用自包含对象其他地方的 backtrace 成员。回溯图对象成员包括:

nodes

一个 JSON 数组,列出回溯图中的节点。每个条目都是一个 JSON 对象,包含以下成员:

file

回溯 files 数组中的一个 0 基无符号整数索引。

可选成员,当节点代表文件中的某一行时存在。其值为一个 1 基无符号整数行号。

命令

可选成员,当节点代表文件中的命令调用时存在。其值为回溯 commands 数组中的一个 0 基无符号整数索引。

parent

可选成员,当节点不是调用堆栈的底部时存在。其值为回溯 nodes 数组中另一个条目的 0 基无符号整数索引。

commands

一个 JSON 数组,列出回溯节点引用的命令名称。每个条目都是一个指定命令名称的字符串。

files

一个 JSON 数组,列出回溯节点引用的 CMake 语言文件。每个条目都是一个指定文件路径的字符串,使用正斜杠表示。如果文件位于顶层源目录内,则路径相对于该目录指定。否则,路径是绝对路径。

Object Kind "configureLog"

3.26 版新增。

configureLog 对象种类描述了 cmake-configure-log(7) 文件的位置和内容。

只有一个 configureLog 对象主版本,版本 1。

Added in version 4.1: configureLog 对象种类的回复由 JSON 模式 以机器可读形式描述。

"configureLog" version 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 数组,其条目都是 JSON 字符串,命名了 cmake-configure-log(7) 的版本化事件种类之一。每个配置日志事件种类的最多一个版本将被列出。尽管配置日志可能包含其他(版本化的)事件种类,但客户端必须忽略在此字段中未列出的那些。

Object Kind "cache"

cache 对象种类列出了缓存条目。这些是存储在构建树的持久缓存(CMakeCache.txt)中的变量

只有一个 cache 对象主版本,版本 2。版本 1 不存在,以避免与 cmake-server(7) 模式中的混淆。

Added in version 4.1: cache 对象种类的回复由 JSON 模式 以机器可读形式描述。

"cache" version 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

一个字符串,指定缓存条目属性的值。

Object Kind "cmakeFiles"

cmakeFiles 对象种类列出了 CMake 在配置和生成构建系统时使用的文件。这些包括 CMakeLists.txt 文件以及包含的 .cmake 文件。

只有一个 cmakeFiles 对象主版本,版本 1。

Added in version 4.1: cmakeFiles 对象种类的回复由 JSON 模式 以机器可读形式描述。

"cmakeFiles" version 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 数组,其条目都是 JSON 对象,指定 CMake 在配置和生成构建系统时使用的输入文件。每个条目的成员是:

path

一个字符串,指定 CMake 输入文件的路径,使用正斜杠表示。如果文件位于顶层源目录内,则路径相对于该目录指定。否则,路径是绝对路径。

isGenerated

可选成员,当路径指定的文件位于顶层构建目录下且构建是 out-of-source 时,以布尔值 true 存在。此成员在 in-source 构建中不可用。

isExternal

可选成员,当路径指定的文件不在顶层源目录或构建目录之外时,以布尔值 true 存在。

isCMake

可选成员,当路径指定的文件位于 CMake 安装目录时,以布尔值 true 存在。

globsDependent

可选成员,当项目调用 file(GLOB)file(GLOB_RECURSE) 并带有 CONFIGURE_DEPENDS 选项时存在。其值为一个 JSON 数组,其中包含 JSON 对象,每个对象指定一个 globbing 表达式和它匹配的路径列表。如果 globbing 表达式不再匹配相同的路径列表,CMake 将认为构建系统已过时。

此字段已在 cmakeFiles 版本 1.1 中添加。

每个条目的成员是:

expression

一个字符串,指定 globbing 表达式。

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

一个 JSON 数组字符串,指定 file(GLOB)file(GLOB_RECURSE) 调用匹配的路径。

Object Kind "toolchains"

toolchains 对象种类列出了构建期间使用的工具链的属性。这些属性包括语言、编译器路径、ID 和版本。

只有一个 toolchains 对象主版本,版本 1。

Added in version 4.1: toolchains 对象种类的回复由 JSON 模式 以机器可读形式描述。

"toolchains" version 1

toolchains 对象版本 1 是一个 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 对象,指定与特定语言关联的工具链。每个条目的成员是:

language

一个 JSON 字符串,指定工具链语言,如 C 或 CXX。语言名称与可以传递给 project() 命令的语言名称相同。由于 CMake 每个语言只支持一个工具链,因此此字段可用作键。

compiler

一个 JSON 对象,包含以下成员:

path

可选成员,当为当前语言定义了 CMAKE_<LANG>_COMPILER 变量时存在。其值为一个 JSON 字符串,包含编译器路径。

id

可选成员,当为当前语言定义了 CMAKE_<LANG>_COMPILER_ID 变量时存在。其值为一个 JSON 字符串,包含编译器的 ID(GNU、MSVC 等)。

版本

可选成员,当为当前语言定义了 CMAKE_<LANG>_COMPILER_VERSION 变量时存在。其值为一个 JSON 字符串,包含编译器的版本。

目标

可选成员,当为当前语言定义了 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 字符串,其中每个字符串包含该语言的源文件扩展名(不带前导点)。