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 在每次运行时写入的回复文件,以生成构建系统。这些文件由 v1 回复索引文件 索引,该索引文件可能引用其他 v1 回复文件。CMake 拥有所有回复文件。客户端绝不能删除它们。

客户端可以随时查找和读取回复索引文件。客户端可以选择随时创建 reply/ 目录,并监控它以查看新回复索引文件的出现。

3.31 版本新增: 用户可以将查询文件添加到 api/v1/query 中的 CMAKE_CONFIG_DIR 中,为所有 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 不必要地生成多个对象版本。

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 对象,包含成员

kind

指定要包含在回复中的对象种类之一。

version

指示客户端理解的对象种类的版本。版本具有遵循语义版本控制约定的主版本和次版本组件。值必须是

  • 一个 JSON 整数,指定一个(非负)主版本号,或

  • 一个 JSON 对象,包含 major 和(可选)minor 成员,指定非负整数版本组件,或

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

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

version

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

major, minor, patch

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

suffix

一个字符串,指定版本后缀(如果有),例如 g0abc3

string

一个字符串,以 <major>.<minor>.<patch>[-<suffix>] 格式指定完整版本。

isDirty

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

paths

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

generator

一个 JSON 对象,描述用于构建的 CMake 生成器。它具有成员

multiConfig

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

name

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

platform

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

objects

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

reply

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

<kind>-v<major>

对于 CMake 识别为对象种类 <kind> 和主版本 <major> 的请求的每个 v1 共享无状态查询文件,都会出现这种形式的成员。该值是对该对象种类和版本的相应回复文件的 v1 回复文件引用

<unknown>

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

client-<client>

对于每个持有 v1 客户端无状态查询文件 的客户端拥有的目录,都会出现这种形式的成员。该值是一个 JSON 对象,镜像 query/client-<client>/ 目录的内容。成员的形式为

<kind>-v<major>

<kind>-v<major>

<unknown>

对于 CMake 识别为对象种类 <kind> 和主版本 <major> 的请求的每个 v1 客户端无状态查询文件,都会出现这种形式的成员。该值是对该对象种类和版本的相应回复文件的 v1 回复文件引用

<unknown>

对于 CMake 未识别的每个 v1 客户端无状态查询文件,都会出现这种形式的成员。该值是一个 JSON 对象,其中包含一个 error 成员,其中包含指示查询文件未知的错误消息的字符串。

client

query.json

requests

使用 v1 客户端有状态查询文件 的客户端会出现此成员。如果 query.json 文件读取或解析为 JSON 对象失败,则此成员是一个 JSON 对象,其中包含一个 error 成员,其中包含错误消息的字符串。否则,此成员是一个 JSON 对象,镜像 query.json 文件的内容。成员包括

client

如果存在,则为 query.json 文件的 client 成员的副本。

  • requests

  • 如果存在,则为 query.json 文件的 requests 成员的副本。

responses

如果 query.json 文件的 requests 成员缺失或无效,则此成员是一个 JSON 对象,其中包含一个 error 成员,其中包含错误消息的字符串。否则,此成员包含一个 JSON 数组,其中包含 requests 数组中每个条目的响应,顺序相同。每个响应是

一个 JSON 对象,其中包含一个 error 成员,其中包含错误消息的字符串,或

kind

到请求的对象种类和选定版本的相应回复文件的 v1 回复文件引用

version

读取回复索引文件后,客户端可以读取它引用的其他 v1 回复文件

v1 回复文件引用

回复索引文件使用具有以下成员的 JSON 对象来表示对另一个回复文件的每个引用

kind

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

version

一个 JSON 对象,具有成员 majorminor,指定对象种类整数版本组件。

jsonFile

{
  "kind": "<kind>",
  "version": { "major": 1, "minor": 0 },
  "...": {}
}

一个 JSON 字符串,指定相对于回复索引文件的路径,指向包含对象的另一个 JSON 文件。

v1 回复文件

包含特定对象种类的回复文件由 CMake 写入。这些文件的名称未指定,客户端不得解释。客户端必须首先读取 v1 回复索引文件,并遵循对所需响应对象名称的引用。

回复文件(包括索引文件)永远不会被同名但内容不同的文件替换。这允许客户端与可能生成新回复的正在运行的 CMake 并发读取文件。但是,在生成新的回复后,CMake 将尝试删除先前运行中它没有刚刚写入的回复文件。如果客户端尝试读取索引引用的回复文件,但发现文件丢失,则意味着并发的 CMake 已生成新的回复。客户端可以简单地重新开始,读取新的回复索引文件。

对象种类

CMake 基于文件的 API 使用以下 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 ],
          "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>"
        }
      ]
    }
  ]
}

kind 成员是一个字符串,指定对象种类名称。version 成员是一个 JSON 对象,具有 majorminor 成员,指定对象种类的整数版本组件。其他顶层成员特定于每个对象种类。

paths

对象种类 "codemodel"

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

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

"codemodel" 版本 2

codemodel 对象版本 2 是一个 JSON 对象

特定于 codemodel 对象的成员包括

一个 JSON 对象,包含成员

name

source

一个字符串,指定顶层源目录的绝对路径,用正斜杠表示。

build

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

一个字符串,指定顶层构建目录的绝对路径,用正斜杠表示。

"codemodel" 版本 2

configurations

一个 JSON 数组,其中包含与可用构建配置对应的条目。在单配置生成器上,CMAKE_BUILD_TYPE 变量的值有一个条目。对于多配置生成器,CMAKE_CONFIGURATION_TYPES 变量中列出的每个配置都有一个条目。每个条目都是一个 JSON 对象,包含成员

name

一个字符串,指定配置的名称,例如 Debug

directories

一个 JSON 数组,其中每个条目对应于一个构建系统目录,该目录的源目录包含 CMakeLists.txt 文件。第一个条目对应于顶层目录。每个条目都是一个 JSON 对象,包含成员

源文件

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

构建文件

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

parentIndex

string

可选成员,当目录不是顶层目录时出现。该值是主 directories 数组中另一个条目的无符号整数从 0 开始的索引,该条目对应于将此目录添加为子目录的父目录。

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

childIndexes

可选成员,当目录具有子目录时出现。该值是对应于 add_subdirectory()subdirs() 命令创建的子目录的条目的 JSON 数组。每个条目都是主 directories 数组中另一个条目的无符号整数从 0 开始的索引。

projectIndex

v1 回复文件引用

projects 数组的无符号整数从 0 开始的索引,指示此目录所属的构建系统项目。

targetIndexes

可选成员,当目录本身具有目标时出现,不包括属于子目录的目标。该值是对应于目标的条目的 JSON 数组。每个条目都是主 targets 数组中另一个条目的无符号整数从 0 开始的索引。

minimumCMakeVersion

可选成员,当目录的 CMake 最低要求版本已知时出现。这是在目录本身或其祖先目录中对 cmake_minimum_required(VERSION) 命令的最本地调用给定的 <min> 版本。该值是一个 JSON 对象,带有一个成员

name

string

一个 JSON 数组,其中包含与可用构建配置对应的条目。在单配置生成器上,CMAKE_BUILD_TYPE 变量的值有一个条目。对于多配置生成器,CMAKE_CONFIGURATION_TYPES 变量中列出的每个配置都有一个条目。每个条目都是一个 JSON 对象,包含成员

一个字符串,以以下格式指定最低要求版本

一个字符串,指定配置的名称,例如 Debug

<主版本>[.<次版本>[.<补丁版本>[.<微调版本>]]]]<后缀>

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

hasInstallRule

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

可选成员,当目录或其子目录之一包含任何 install() 规则时,以布尔值 true 形式出现,即 make install 或等效规则是否可用。

jsonFile

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

name

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

projects

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

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

name

一个 JSON 数组,其中每个条目对应于一个构建系统目录,该目录的源目录包含 CMakeLists.txt 文件。第一个条目对应于顶层目录。每个条目都是一个 JSON 对象,包含成员

一个字符串,指定赋予 project() 命令的名称。

v1 回复文件引用

parentIndex

可选成员,当项目不是顶层项目时出现。该值是主 projects 数组中另一个条目的无符号整数从 0 开始的索引,该条目对应于将此项目添加为子项目的父项目。

childIndexes

paths

对象种类 "codemodel"

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

一个字符串,指定顶层构建目录的绝对路径,用正斜杠表示。

"codemodel" 版本 2

configurations

可选成员,当项目具有子项目时出现。该值是对应于子项目的条目的 JSON 数组。每个条目都是主 projects 数组中另一个条目的无符号整数从 0 开始的索引。

directoryIndexes

一个 JSON 数组,其中包含与属于该项目的构建系统目录对应的条目。第一个条目对应于项目的顶层目录。每个条目都是主 directories 数组中另一个条目的无符号整数从 0 开始的索引。

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

destination

可选成员,对于下面特定的 type 值存在。该值是一个字符串,用于指定安装目标路径。该路径可以是绝对路径,也可以是相对于安装前缀的相对路径。

paths

可选成员,对于下面特定的 type 值存在。该值是一个 JSON 数组,包含对应于要安装的路径(文件或目录)的条目。每个条目是以下之一

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

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

    from

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

    to

    一个字符串,用于指定文件或目录在目标位置下的安装路径。

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

type

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

file

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

directory

一个 install(DIRECTORY) 调用。destinationpaths 成员会被填充,路径位于顶层 *source* 目录下,并相对于它表示。isOptional 成员可能存在。此类型没有额外的成员。

target

一个 install(TARGETS) 调用。destinationpaths 成员会被填充,路径位于顶层 *build* 目录下,并相对于它表示。isOptional 成员可能存在。此类型有额外的成员 targetIdtargetIndextargetIsImportLibrarytargetInstallNamelink

export

一个 install(EXPORT) 调用。destinationpaths 成员会被填充,路径位于顶层 *build* 目录下,并相对于它表示。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 中添加。

isExcludeFromAll

可选成员,当 install() 被调用时,以布尔值 true 存在,并且带有 EXCLUDE_FROM_ALL 选项。

isForAllComponents

可选成员,当 install(SCRIPT|CODE) 被调用时,以布尔值 true 存在,并且带有 ALL_COMPONENTS 选项。

isOptional

可选成员,当 install() 被调用时,以布尔值 true 存在,并且带有 OPTIONAL 选项。当 typefiledirectorytarget 时允许使用此选项。

targetId

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

targetIndex

可选成员,当 typetarget 时存在。该值是一个无符号整数,基于 0 的索引,指向主 "codemodel" 对象的 targets 数组中要安装的目标。

targetIsImportLibrary

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

targetInstallNamelink

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

exportName

可选成员,当 typeexport 时存在。该值是一个字符串,用于指定导出的名称。

exportTargets

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

projects

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

索引

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

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> 的 genex 求值确定)。

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

fileSetTarget

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

projects

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

索引

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

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

scriptFile

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

backtrace

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

backtraceGraph

一个 "codemodel" 版本 2 "回溯图",其节点从本 "directory" 对象中其他位置的 backtrace 成员引用。

"codemodel" 版本 2 "target" 对象

codemodel "target" 对象由 "codemodel" 版本 2 对象的 targets 数组引用。每个 "target" 对象都是一个 JSON 对象,包含以下成员

name

一个字符串,用于指定目标的逻辑名称。

projects

一个字符串,唯一标识目标。格式未指定,客户端不应解释。

type

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

backtrace

可选成员,当 CMake 语言回溯到源代码中创建目标的命令可用时存在。该值是一个无符号整数,基于 0 的索引,指向 backtraceGraph 成员的 nodes 数组。

folder

可选成员,当设置了 FOLDER 目标属性时存在。该值是一个 JSON 对象,包含一个成员

name

一个字符串,用于指定目标文件夹的名称。

paths

对象种类 "codemodel"

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

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

"codemodel" 版本 2

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

nameOnDisk

可选成员,对于链接或归档到单个主要工件中的可执行文件和库目标存在。该值是一个字符串,用于指定该工件在磁盘上的文件名。

artifacts

可选成员,对于在磁盘上生成工件以供依赖项使用的可执行文件和库目标存在。该值是一个 JSON 数组,包含对应于工件的条目。每个条目都是一个 JSON 对象,包含一个成员

path

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

isGeneratorProvided

可选成员,如果目标由 CMake 的构建系统生成器而不是源代码中的命令提供,则以布尔值 true 存在。

install

可选成员,当目标具有 install() 规则时存在。该值是一个 JSON 对象,包含以下成员

prefix

一个 JSON 对象,用于指定安装前缀。它有一个成员

path

一个字符串,用于指定 CMAKE_INSTALL_PREFIX 的值。

destinations

一个 JSON 数组,包含用于指定安装目标路径的条目。每个条目都是一个 JSON 对象,包含以下成员

path

一个字符串,用于指定安装目标路径。该路径可以是绝对路径,也可以是相对于安装前缀的相对路径。

backtrace

可选成员,当 CMake 语言回溯到指定此目标的 install() 命令调用可用时存在。该值是一个无符号整数,基于 0 的索引,指向 backtraceGraph 成员的 nodes 数组。

launchers

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

command

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

arguments

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

type

一个字符串,用于指定启动器的类型。该值是以下之一

emulator

交叉编译时目标平台的模拟器。请参阅 CROSSCOMPILING_EMULATOR 目标属性。

test

用于执行测试的启动程序。请参阅 TEST_LAUNCHER 目标属性。

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

link

可选成员,对于链接到运行时二进制文件的可执行文件和共享库目标存在。该值是一个 JSON 对象,包含描述链接步骤的成员

language

一个字符串,用于指定用于调用链接器的工具链的语言(例如,CCXXFortran)。

commandFragments

可选成员,当链接命令行调用的片段可用时存在。该值是一个 JSON 数组,包含指定有序片段的条目。每个条目都是一个 JSON 对象,包含以下成员

fragment

一个字符串,用于指定链接命令行调用的片段。该值以构建系统的本机 shell 格式编码。

role

一个字符串,用于指定片段内容的角色

  • flags:链接标志。

  • libraries:链接库文件路径或标志。

  • libraryPath:库搜索路径标志。

  • frameworkPath:macOS 框架搜索路径标志。

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 对象,包含以下成员

projects

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

backtrace

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

fileSets

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

name

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

type

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

visibility

一个字符串,用于指定文件集的可見性;PUBLICPRIVATEINTERFACE 之一。

baseDirectories

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

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

sources

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

path

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

compileGroupIndex

可选成员,当源文件被编译时存在。该值是一个无符号整数,基于 0 的索引,指向 compileGroups 数组。

sourceGroupIndex

可选成员,当源文件通过 source_group() 命令或默认方式成为源组的一部分时存在。该值是一个无符号整数,基于 0 的索引,指向 sourceGroups 数组。

isGenerated

可选成员,如果源文件是 GENERATED,则以布尔值 true 存在。

fileSetIndex

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

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

backtrace

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

sourceGroups

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

name

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

sourceIndexes

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

compileGroups

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

sourceIndexes

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

language

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

languageStandard

可选成员,当显式设置语言标准时出现(例如,通过 CXX_STANDARD)或通过编译特性隐式设置时。每个条目都是一个包含两个成员的 JSON 对象

回溯信息 (backtraces)

可选成员,当 CMake 语言回溯到 <LANG>_STANDARD 设置可用时出现。如果语言标准是通过编译特性隐式设置的,则这些特性将用作回溯信息。可能有多个编译特性需要相同的语言标准,因此可能存在多个回溯信息。该值是一个 JSON 数组,每个条目都是一个无符号整数,表示在 backtraceGraph 成员的 nodes 数组中的从 0 开始的索引。

标准 (standard)

表示语言标准的字符串。

此字段在代码模型版本 2.2 中添加。

编译命令片段 (compileCommandFragments)

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

fragment

一个字符串,指定编译命令行调用的片段。该值以构建系统的本机 shell 格式编码。

包含目录 (includes)

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

path

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

是系统目录 (isSystem)

可选成员,当包含目录被标记为系统包含目录时出现,布尔值为 true

backtrace

可选成员,当 CMake 语言回溯到 target_include_directories() 或添加此包含目录的其他命令调用可用时出现。该值是一个无符号整数,表示在 backtraceGraph 成员的 nodes 数组中的从 0 开始的索引。

框架 (frameworks)

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

path

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

是系统目录 (isSystem)

可选成员,当框架被标记为系统框架时出现,布尔值为 true

backtrace

可选成员,当 CMake 语言回溯到 target_link_libraries() 或添加此框架的其他命令调用可用时出现。该值是一个无符号整数,表示在 backtraceGraph 成员的 nodes 数组中的从 0 开始的索引。

此字段在代码模型版本 2.6 中添加。

预编译头文件 (precompileHeaders)

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

头文件 (header)

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

backtrace

可选成员,当 CMake 语言回溯到 target_precompile_headers() 或添加此预编译头文件的其他命令调用可用时出现。该值是一个无符号整数,表示在 backtraceGraph 成员的 nodes 数组中的从 0 开始的索引。

此字段在代码模型版本 2.1 中添加。

宏定义 (defines)

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

定义 (define)

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

backtrace

可选成员,当 CMake 语言回溯到 target_compile_definitions() 或添加此预处理器定义的其他命令调用可用时出现。该值是一个无符号整数,表示在 backtraceGraph 成员的 nodes 数组中的从 0 开始的索引。

sysroot

可选成员,当定义了 CMAKE_SYSROOT_COMPILECMAKE_SYSROOT 变量时出现。该值是一个包含一个成员的 JSON 对象

path

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

backtraceGraph

一个 “codemodel” 版本 2 “回溯图”,其节点从本 “target” 对象中的其他 backtrace 成员引用。

“codemodel” 版本 2 “回溯图”

“codemodel” 版本 2 “目录” 对象“codemodel” 版本 2 “目标” 对象backtraceGraph 成员是一个描述回溯图的 JSON 对象。它的节点从包含对象中的其他 backtrace 成员引用。回溯图对象成员包括

节点 (nodes)

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

file

一个无符号整数,表示回溯 files 数组中的从 0 开始的索引。

行号 (line)

一个可选成员,当节点表示文件中的一行时出现。该值是一个无符号整数,表示从 1 开始的行号。

command

一个可选成员,当节点表示文件中的命令调用时出现。该值是一个无符号整数,表示回溯 commands 数组中的从 0 开始的索引。

父节点 (parent)

一个可选成员,当节点不是调用堆栈的底部时出现。该值是回溯 nodes 数组中另一个条目的从 0 开始的索引。

命令 (commands)

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

文件 (files)

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

对象类型 “configureLog”

在版本 3.26 中添加。

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

一个字符串,指定配置日志文件的路径。客户端必须从此路径读取日志文件,该路径可能与 cmake-configure-log(7) 文档化的路径不同。如果未记录任何事件,则日志文件可能不存在。

事件类型名称 (eventKindNames)

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

对象类型 “cache”

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

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

“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 对象,指定一个缓存条目。每个条目的成员包括

name

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

值 (value)

一个字符串,指定条目的值。

type

一个字符串,指定 cmake-gui(1) 使用的条目类型,用于选择编辑小部件。

属性 (properties)

一个 JSON 数组,其中包含指定关联的 缓存条目属性 的条目。每个条目都是一个包含以下成员的 JSON 对象

name

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

值 (value)

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

对象类型 “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

对象种类 "codemodel"

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

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

"codemodel" 版本 2

codemodel 对象版本 2 是一个 JSON 对象

输入 (inputs)

一个 JSON 数组,其条目都是 JSON 对象,指定 CMake 在配置和生成构建系统时使用的输入文件。每个条目的成员包括

path

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

isGenerated

可选成员,当路径指定顶层构建目录下的文件,并且构建是外部构建时,布尔值为 true。此成员在内部构建中不可用。

是外部文件 (isExternal)

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

是 CMake 文件 (isCMake)

可选成员,当路径指定 CMake 安装中的文件时,布尔值为 true

依赖于 Glob 表达式 (globsDependent)

可选成员,当项目调用 file(GLOB)file(GLOB_RECURSE) 并使用 CONFIGURE_DEPENDS 选项时出现。该值是一个 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

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

对象类型 “toolchains”

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

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

“toolchains” 版本 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)

对象种类 "codemodel"

path

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

projects

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

version

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

target

可选成员,当为当前语言定义了 CMAKE_<LANG>_COMPILER_TARGET 变量时出现。它的值是一个 JSON 字符串,其中包含编译器的交叉编译目标。

隐式 (implicit)

对象种类 "codemodel"

包含目录 (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 字符串数组,其中每个字符串都包含该语言的文件扩展名(不带前导点)。