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-*.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>

其中 <kind>对象种类之一,-v 是字面量,<major> 是主要版本号。

这种形式的文件是不属于任何特定客户端的无状态共享查询。一旦创建,除非有外部客户端协调或人工干预,否则不应删除它们。

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 附带的内容的路径。它具有 cmakectestcpack 的成员,其值是指定每个工具绝对路径的 JSON 字符串(用正斜杠表示)。它还有一个 root 成员,用于指定包含 CMake 资源(如 Modules/ 目录)的目录的绝对路径(参见 CMAKE_ROOT)。

generator

描述用于构建的 CMake 生成器的 JSON 对象。它具有以下成员

multiConfig

指定生成器是否支持多种输出配置的布尔值。

名称

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

platform

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

objects

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

reply

一个 JSON 对象,反映了 CMake 为生成回复而加载的 query/ 目录的内容。成员的格式为

<kind>-v<major>

对于每个 CMake 识别为请求对象种类 <kind> 且主要版本为 <major>v1 共享无状态查询文件,都会出现此格式的成员。其值是

  • 对该对象种类和版本的相应回复文件的 v1 回复文件引用,或者

  • v1 回复错误索引中,一个包含单个 error 成员的 JSON 对象,其中包含带有错误消息的字符串。

<unknown>

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

client-<client>

对于每个持有 v1 客户端无状态查询文件的客户端自有目录,都会出现此格式的成员。其值是一个反映 query/client-<client>/ 目录内容的 JSON 对象。成员的格式为

<kind>-v<major>

对于每个 CMake 识别为请求对象种类 <kind> 且主要版本为 <major>v1 客户端无状态查询文件,都会出现此格式的成员。其值是

  • 对该对象种类和版本的相应回复文件的 v1 回复文件引用,或者

  • v1 回复错误索引中,一个包含单个 error 成员的 JSON 对象,其中包含带有错误消息的字符串。

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

种类

指定对象种类之一的字符串。

版本

一个带有 majorminor 成员的 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 成员是一个带有 majorminor 成员的 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

指定安装规则类型的字符串。该值是以下之一,某些变体提供额外的成员

file

install(FILES)install(PROGRAMS) 调用。destinationpaths 成员被填充,顶层目录下的路径表示为相对于该目录。可能存在 isOptional 成员。此类型没有额外的成员。

directory

install(DIRECTORY) 调用。destinationpaths 成员被填充,顶层目录下的路径表示为相对于该目录。可能存在 isOptional 成员。此类型没有额外的成员。

目标

install(TARGETS) 调用。destinationpaths 成员被填充,顶层构建目录下的路径表示为相对于该目录。可能存在 isOptional 成员。此类型具有额外的成员 targetIdtargetIndextargetIsImportLibrarytargetInstallNamelink

export

install(EXPORT) 调用。destinationpaths 成员被填充,顶层构建目录下的路径表示为相对于该目录。paths 条目指的是 CMake 自动生成的用于安装的文件,其实际值被视为私有实现细节。此类型具有额外的成员 exportNameexportTargets

script

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

code

install(CODE) 调用。此类型没有额外的成员。

importedRuntimeArtifacts

install(IMPORTED_RUNTIME_ARTIFACTS) 调用。destination 成员被填充。可能存在 isOptional 成员。此类型没有额外的成员。

runtimeDependencySet

install(RUNTIME_DEPENDENCY_SET) 调用或带有 RUNTIME_DEPENDENCIESinstall(TARGETS) 调用。destination 成员被填充。此类型具有额外的成员 runtimeDependencySetNameruntimeDependencySetType

fileSet

带有 FILE_SETinstall(TARGETS) 调用。destinationpaths 成员被填充。可能存在 isOptional 成员。此类型具有额外的成员 fileSetNamefileSetTypefileSetDirectoriesfileSetTarget

此类型在 codemodel 版本 2.4 中添加。

cxxModuleBmi

带有 CXX_MODULES_BMIinstall(TARGETS) 调用。destination 成员被填充,且可能存在 isOptional 成员。此类型具有额外的 cxxModuleBmiTarget 成员。

此类型在 codemodel 版本 2.5 中添加。

isExcludeFromAll

install()EXCLUDE_FROM_ALL 选项一起调用时,存在且布尔值为 true 的可选成员。

isForAllComponents

install(SCRIPT|CODE)ALL_COMPONENTS 选项一起调用时,存在且布尔值为 true 的可选成员。

isOptional

install()OPTIONAL 选项一起调用时,存在且布尔值为 true 的可选成员。当 typefiledirectorytarget 时,这是允许的。

targetId

typetarget 时存在的可选成员。该值是唯一标识要安装的目标的字符串。这与主 "codemodel" 对象 targets 数组中目标的 id 成员匹配。

targetIndex

typetarget 时存在的可选成员。该值是主 "codemodel" 对象 targets 数组中要安装目标的从 0 开始的无符号整数索引。

targetIsImportLibrary

typetarget 且安装程序用于 Windows DLL 导入库文件或 AIX 链接器导入文件时存在的可选成员。如果存在,其布尔值为 true

targetInstallNamelink

typetarget 且安装程序对应于可能使用符号链接来实现 VERSIONSOVERSION 目标属性的目标时存在的可选成员。该值是指示安装程序应如何处理符号链接的字符串:skip 表示安装程序应跳过符号链接并仅安装实际文件,only 表示安装程序应仅安装符号链接而不安装实际文件。在所有情况下,paths 成员都会列出它实际安装的内容。

exportName

typeexport 时存在的可选成员。该值是指定导出名称的字符串。

exportTargets

typeexport 时存在的可选成员。该值是对应于包含在导出中的目标的条目组成的 JSON 数组。每个条目都是一个包含以下成员的 JSON 对象

id

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

索引

目标在主 "codemodel" 对象 targets 数组中的从 0 开始的无符号整数索引。

runtimeDependencySetName

typeruntimeDependencySet 且安装程序由 install(RUNTIME_DEPENDENCY_SET) 调用创建时存在的可选成员。该值是指定所安装运行时依赖集名称的字符串。

runtimeDependencySetType

typeruntimeDependencySet 时存在的可选成员。该值是以下值之一的字符串

library

指示此安装程序安装非 macOS 框架的依赖项。

framework

指示此安装程序安装 macOS 框架的依赖项。

fileSetName

typefileSet 时存在的可选成员。该值是包含文件集名称的字符串。

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

fileSetType

typefileSet 时存在的可选成员。该值是包含文件集类型的字符串。

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

fileSetDirectories

typefileSet 时存在的可选成员。该值是包含文件集基目录的字符串列表(由 HEADER_DIRSHEADER_DIRS_<NAME> 的生成表达式评估确定)。

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

fileSetTarget

typefileSet 时存在的可选成员。该值是一个包含以下成员的 JSON 对象

id

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

索引

目标在主 "codemodel" 对象 targets 数组中的从 0 开始的无符号整数索引。

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

cxxModuleBmiTarget

typecxxModuleBmi 时存在的可选成员。该值是一个包含以下成员的 JSON 对象

id

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

索引

目标在主 "codemodel" 对象 targets 数组中的从 0 开始的无符号整数索引。

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

scriptFile

typescript 时存在的可选成员。该值是指定磁盘上脚本文件路径的字符串(用正斜杠表示)。如果文件在顶层源目录内,则路径是相对于该目录指定的。否则,路径是绝对路径。

回溯

当可以使用指向添加此安装程序的 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

指定目标类型的字符串。该值是 EXECUTABLESTATIC_LIBRARYSHARED_LIBRARYMODULE_LIBRARYOBJECT_LIBRARYINTERFACE_LIBRARYUTILITY 之一。

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

idfragment 其中之一将始终存在。

fragment

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

idfragment 其中之一将始终存在。

回溯

可选成员,当存在指向创建此关系的命令调用的 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 标识的目标不一定属于构建系统。它可能是一个导入的目标或没有源文件或文件集的接口库。

idfragment 其中之一将始终存在。

fragment

可选成员,当接口链接库不是针对某个目标时出现。它是一个字符串,包含要应用于此目标的接口链接库消费者的原始链接器命令行参数。这些通常是用于按名称而不是按目标链接到库或框架的链接器参数。

idfragment 其中之一将始终存在。

回溯

可选成员,当存在指向创建此接口关系的命令调用的 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 中(这仅与 XcodeVisual Studio 生成器有关)。

其值为 JSON 对象数组。每个条目都是一个包含成员的 JSON 对象

id

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

回溯

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

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

fileSets

当目标定义一个或多个文件集时出现的可选成员。其值为对应于目标文件集的 JSON 对象数组。每个条目都是一个包含成员的 JSON 对象

名称

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

type

指定文件集类型的字符串。请参阅 target_sources() 支持的文件集类型。

visibility

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

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>] 的预处理器定义的字符串,例如 DEFDEF=1

回溯

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

sysroot

可选成员,当定义了 CMAKE_SYSROOT_COMPILECMAKE_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 会认为构建系统已过期。

此字段添加于 cmakeFiles 1.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 字符串数组,其中每个字符串包含该语言的文件扩展名(不带前导点)。