cmake-file-api(7)

简介

CMake 提供了文件 API,供客户端获取 CMake 生成构建系统语义信息。客户端可以使用此 API 将查询文件写入到构建树中的特定位置,以请求一个或多个对象类型 (Object Kinds)。当 CMake 在该构建树中生成构建系统时,它会读取查询文件,并为客户端写入答复文件。

基于文件的 API 使用构建树顶部的 <build>/.cmake/api/ 目录。此 API 是版本化的,以支持 API 目录内文件布局的更改。API 文件布局版本控制与 Object Kinds 答复中使用的版本控制是正交的。此版本 CMake 仅支持一个 API 版本 (API v1)。

3.27 版本中新增:项目也可以使用 cmake_file_api() 命令来提交当前运行的查询。

API v1

API v1 位于 <build>/.cmake/api/v1/ 目录中。它有以下子目录

query/

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

reply/

保存 CMake 在运行生成构建系统时写入的答复文件。可以通过 v1 答复索引文件 索引这些文件,该文件可能引用其他 v1 答复文件。CMake 拥有所有答复文件。客户端不得删除这些文件。

客户端可以随时查找并读取回复索引文件。客户端可以随时创建reply/目录(如果尚未创建),并监控此目录是否出现新的回复索引文件。

版本 3.31 中添加: 用户可以在CMAKE_CONFIG_DIR 内部向 api/v1/query 添加查询文件,从而为所有 CMake 项目创建用户级查询。

v1 共享无状态查询文件

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

客户端可以通过在 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": {}
}

成员包括:

请求

包含零个或多个请求的 JSON 数组。每个请求都是一个 JSON 对象,包含成员:

种类

指定回复中将包含的 对象类型 之一。

版本

指示客户端理解的对象类型的版本。版本遵循语义版本惯例,包含主版本和次要版本组件。该值必须为:

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

  • 包含 major(主版本)和(可选)minor(次要版本)成员、指定非负整数版本组件的 JSON 对象,或

  • 元素中每个都是以上元素之一的 JSON 数组。

客户端

为客户端使用而保留的可选成员。此值保留在 v1 回复索引文件 中为客户端编写的回复中,但在其他情况下将被忽略。客户端可以使用此值通过请求传递定制信息到其回复。

对于每个请求的对象类型,CMake 将在请求中列出的版本中选择它识别的第一个版本。响应将使用选中版本与运行的 CMake 针对该主版本已知的最高次要版本。因此,客户端应按优先顺序列出所有受支持的主版本,以及每个主版本所需的最低次要版本。

客户端

为客户端使用而保留的可选成员。此值保留在 v1 回复索引文件 中为客户端编写的回复中,但在其他情况下将被忽略。客户端可以使用此值通过查询传递定制信息到其回复。

其他 query.json 顶级成员为将来使用而保留。如果出现,它们将被忽略以保持向前兼容性。

v1 回复索引文件

CMake 在每次运行以生成构建系统时,都会将 index-*.json 文件写入 v1/reply/ 目录。客户端必须首先读取回复索引文件,并且只能通过遵循引用读取其他 v1 回复文件。回复索引文件名称的格式为:

<build>/.cmake/api/v1/reply/index-<unspecified>.json

其中 index- 为文本,<unspecified> 是由 CMake 选定的未指定名称。每当生成一个新索引文件时,都会为它指定一个新名称,并删除任何旧名称。在执行这些步骤之间的短时间内,可能有多个索引文件;按词典顺序名称最大的文件是当前索引文件。

回复索引文件包含一个 JSON 对象

{
  "cmake": {
    "version": {
      "major": 3, "minor": 14, "patch": 0, "suffix": "",
      "string": "3.14.0", "isDirty": false
    },
    "paths": {
      "cmake": "/prefix/bin/cmake",
      "ctest": "/prefix/bin/ctest",
      "cpack": "/prefix/bin/cpack",
      "root": "/prefix/share/cmake-3.14"
    },
    "generator": {
      "multiConfig": false,
      "name": "Unix Makefiles"
    }
  },
  "objects": [
    { "kind": "<kind>",
      "version": { "major": 1, "minor": 0 },
      "jsonFile": "<file>" },
    { "...": "..." }
  ],
  "reply": {
    "<kind>-v<major>": { "kind": "<kind>",
                         "version": { "major": 1, "minor": 0 },
                         "jsonFile": "<file>" },
    "<unknown>": { "error": "unknown query file" },
    "...": {},
    "client-<client>": {
      "<kind>-v<major>": { "kind": "<kind>",
                           "version": { "major": 1, "minor": 0 },
                           "jsonFile": "<file>" },
      "<unknown>": { "error": "unknown query file" },
      "...": {},
      "query.json": {
        "requests": [ {}, {}, {} ],
        "responses": [
          { "kind": "<kind>",
            "version": { "major": 1, "minor": 0 },
            "jsonFile": "<file>" },
          { "error": "unknown query file" },
          { "...": {} }
        ],
        "client": {}
      }
    }
  }
}

成员包括:

cmake

一个包含有关生成响应的 CMake 实例信息的 JSON 对象。它包含以下成员

版本

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

majorminorpatch

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

suffix

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

string

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

isDirty

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

paths

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

generator

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

multiConfig

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

name

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

platform

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

objects

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

reply

对 CMake 加载来生成响应的 query/ 目录的内容进行镜像的 JSON 对象。成员的格式为

<kind>-v<major>

此表单的一个成员出现在 v1 共享无状态查询文件 中,CMake 将其识别为请求对象种类的 major 版本 <kind><major>。该值是一个 v1 响应文件引用,用于该对象种类和版本的相应响应文件。

<unknown>

此表单的一个成员出现在 v1 共享无状态查询文件 中,CMake 无法识别它们。该值是一个 JSON 对象,它包含单个 error 成员,其中包含一个字符串,其文本包含一条错误消息,说明查询文件未知。

client-<client>

此表单的成员对每个 holding v1 客户端无状态查询文件 的客户端所有目录出现一次。该值是一个 JSON 对象,镜像 query/client-<client>/ 目录的内容。成员的格式如下

<kind>-v<major>

此表单的成员对每个 v1 客户端无状态查询文件 出现一次,该文件为 CMake 识别的对象类型 <kind> 的请求,主版本为 <major>。该值是一个 v1 回复文件引用,指向该对象类型和版本的相应回复文件。

<unknown>

此表单的成员对每个 v1 客户端无状态查询文件 出现一次,该文件未被 CMake 识别。该值是一个 JSON 对象,包含一个 error 成员,其包含一个字符串,其中带有错误消息,指示该查询文件未知。

query.json

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

客户端

如果有,query.json 文件 client 成员的副本。

请求

如果有,query.json 文件 requests 成员的副本。

responses

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

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

  • 一个 v1 回复文件引用,指向所请求的对象类型和所选版本的相应回复文件。

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

有关对象类型的详细信息,请参阅 对象类型 部分。

v1 回复文件引用

种类

回复索引文件使用具有成员的 JSON 对象来表示对其他回复文件的每个引用

版本

指定某个 对象类型 的字符串。

一个 JSON 对象,其成员 majorminor 指定对象类型的主版本组件。

jsonFile

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

包含特定 对象种类的 回复文件由 CMake 编写。这些文件的文件名不指定,且不能由客户端进行解释。客户端必须先读取 v1 回复索引文件,然后根据引用查找所需的响应对象的文件名。

回复文件(包括索引文件)永远不会被具有相同名称但内容不同的文件替换。这样可以让客户端与正在生成新回复的 CMake 并发读取这些文件。然而,在生成新回复后,CMake 会尝试移除不是它刚刚写入的上个运行所生成的回复文件。如果客户端尝试读取索引中引用的回复文件,但发现文件丢失,这意味着一个并发的 CMake 已生成一个新回复。客户端只需读取新的回复索引文件即可重新开始。

对象种类

基于 CMake 文件的 API 使用以下 JSON 对象的类型来报告有关构建系统的语义信息。每种类型的对象使用带有主要和次要组件的语义版本控制独立进行版本控制。每种类型的对象都具有以下形式

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

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

对象类型“codemodel”

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

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

对象类型“codemodel”版本 2

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

{
  "kind": "codemodel",
  "version": { "major": 2, "minor": 7 },
  "paths": {
    "source": "/path/to/top-level-source-dir",
    "build": "/path/to/top-level-build-dir"
  },
  "configurations": [
    {
      "name": "Debug",
      "directories": [
        {
          "source": ".",
          "build": ".",
          "childIndexes": [ 1 ],
          "projectIndex": 0,
          "targetIndexes": [ 0 ],
          "hasInstallRule": true,
          "minimumCMakeVersion": {
            "string": "3.14"
          },
          "jsonFile": "<file>"
        },
        {
          "source": "sub",
          "build": "sub",
          "parentIndex": 0,
          "projectIndex": 0,
          "targetIndexes": [ 1 ],
          "minimumCMakeVersion": {
            "string": "3.14"
          },
          "jsonFile": "<file>"
        }
      ],
      "projects": [
        {
          "name": "MyProject",
          "directoryIndexes": [ 0, 1 ],
          "targetIndexes": [ 0, 1 ]
        }
      ],
      "targets": [
        {
          "name": "MyExecutable",
          "directoryIndex": 0,
          "projectIndex": 0,
          "jsonFile": "<file>"
        },
        {
          "name": "MyLibrary",
          "directoryIndex": 1,
          "projectIndex": 0,
          "jsonFile": "<file>"
        }
      ]
    }
  ]
}

codemodel 对象特有的成员有

paths

包含以下成员的 JSON 对象

source

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

build

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

configurations

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

name

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

directories

与包含 CMakeLists.txt 文件的构建系统目录相对应的每个条目的 JSON 数组。首个条目对应于顶层目录。每个条目都是一个包含成员的 JSON 对象

source

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

build

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

parentIndex

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

childIndexes

目录具有子目录时存在的可选成员。该值是与通过 add_subdirectory()subdirs() 命令创建的子目录对应的条目的 JSON 数组。每个条目都是主 directories 数组中另一个条目的 0 基无符号整数索引。

projectIndex

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

targetIndexes

目录本身具有目标时存在的可选成员,不包括属于子目录的目标。该值是与目标对应的条目的 JSON 数组。每个条目都是主 targets 数组的 0 基无符号整数索引。

minimumCMakeVersion

当目录要求的最小 CMake 版本时存在的可选成员。这是给定目录自身或其某个祖先中对 cmake_minimum_required(VERSION) 命令的最本地调用的 <min> 版本。该值是一个具有一个成员的 JSON 对象

string

指定最小要求版本的字符串,格式为

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

每个分量都是无符号整数,后缀可以是任意字符串。

hasInstallRule

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

一个 JSON 对象,其成员 majorminor 指定对象类型的主版本组件。

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

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

projects

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

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

name

指定给 project() 命令的字符串。

parentIndex

在项目不是顶级时出现的可选成员。值是主要 projects 数组中另一个条目的无符号整数(以 0 为基数的索引),该条目对应于将此项目作为子项目添加的父项目。

childIndexes

在项目有子项目时出现的可选成员。值是与子项目相对应的条目的 JSON 数组。每个条目都是主 projects 数组中另一个条目的无符号整数(以 0 为基数的索引)。

directoryIndexes

与属于项目的构建系统目录相对应的条目的 JSON 数组。第一个条目对应于项目的顶级目录。每个条目都是主要 directories 数组中的无符号整数(以 0 为基数的索引)。

targetIndexes

在项目本身有目标(不包括属于子项目的那些)时出现的可选成员。值是与目标相对应的条目的 JSON 数组。每个条目都是主 targets 数组中的无符号整数(以 0 为基数的索引)。

targets

与构建系统目标相对应的条目的 JSON 数组。此类目标是通过调用 add_executable()add_library()add_custom_target() 创建的(不包括导入的目标和接口库,它们不生成任何构建规则)。每个条目都是包含成员的 JSON 对象

name

指定目标名称的字符串。

id

唯一标识目标的字符串。这与 jsonFile 引用的文件中的 id 对应。

directoryIndex

directories数组中的无符号整数(以 0 为基数的索引),指示定义目标的构建系统目录。

projectIndex

projects 数组中的无符号整数(以 0 为基数的索引),指示定义目标的构建系统项目。

一个 JSON 对象,其成员 majorminor 指定对象类型的主版本组件。

一个 JSON 字符串,指定相对于 codemodel 文件的路径,通往包含 “codemodel” 版本 2 “target” 对象 的另一个 JSON 文件。

“codemodel” 版本 2 “目录” 对象

一个 Codemodel“目录”对象 是由一个 Codemodel 版本 2 对象的 directories 数组来引用的。每一个“目录”对象都是一个具有以下成员的 JSON 对象

paths

包含以下成员的 JSON 对象

source

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

build

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

installers

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

component

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

destination

可选成员,存在于以下特定 type 值。

paths

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

  • 指定要从中安装文件或目录的路径的字符串。以 / 为前缀的路径的一部分还指定要将文件或目录安装到的路径(名称),它位于目标位置之下。

  • 一个具有以下成员的 JSON 对象

    from

    指定要从中安装文件或目录的路径的字符串。

    to

    指定要将文件或目录安装到的路径的字符串,它位于目标位置之下。

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

type

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

file

一个 install(FILES)install(PROGRAMS) 调用。填充 destinationpaths 成员,最顶层目录下的路径与它相对。可能存在 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) 调用或 install(TARGETS) 调用与 RUNTIME_DEPENDENCIESdestination 成员已填充。此类型有其他成员 runtimeDependencySetNameruntimeDependencySetType

fileSet

一个带有 FILE_SETinstall(TARGETS) 调用。填充了 destinationpaths 成员。 isOptional 成员可能存在。此类型有附加成员 fileSetNamefileSetTypefileSetDirectoriesfileSetTarget

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

isExcludeFromAll

当使用 EXCLUDE_FROM_ALL 选项调用 install() 时,显示的可选成员,布尔值为 true

isForAllComponents

当使用 ALL_COMPONENTS 选项调用 install(SCRIPT|CODE) 时,显示的可选成员,布尔值为 true

isOptional

当使用 OPTIONAL 选项调用 install() 时,显示的可选成员,布尔值为 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> 的 genex 计算确定)的字符串列表。

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

fileSetTarget

typefileSet 时存在的可选成员。该值为包含成员的 JSON 对象

id

唯一地标识目标的字符串。此字符串匹配主“codemodel”对象的targets数组中目标的id成员。

索引

主“codemodel”对象的targets数组中目标的无符号整型 0 基索引。

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

scriptFile

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

backtrace

当从添加此安装程序的 install() 或其他命令调用可获取 CMake 语言回溯时存在的可选成员。该值为 backtraceGraph 成员的 nodes 数组中以 0 为基准的无符号整数索引。

backtraceGraph

“codemodel” 2 版“回溯图”,其节点在“目录”对象的其他位置从 backtrace 成员引用。

“codemodel” 2 版“目标”

“codemodel” 2 版 对象的 targets 数组中引用了 codemodel “target” 对象。每个“target”对象都是一个 JSON 对象,包含成员

name

指定目标逻辑名称的字符串。

id

唯一标识该目标的字符串。格式未指定,且客户端不应对此格式进行解释。

type

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

backtrace

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

folder

FOLDER 目标属性被设置时,当前的可选成员可用。该值是一个带有单个成员的 JSON 对象

name

指定目标文件夹名称的字符串。

paths

包含以下成员的 JSON 对象

source

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

build

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

nameOnDisk

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

artifacts

对于生成磁盘上工件的可执行文件和库目标,当前的可选成员可用,这些工件用于被依赖项使用。该值是一个 JSON 数组,包含与工件对应的项。每个项都是一个包含一个成员的 JSON 对象

path

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

isGeneratorProvided

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

install

当目标有 install() 规则时,当前的可选成员可用。该值是一个带有成员的 JSON 对象

prefix

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

path

指定 CMAKE_INSTALL_PREFIX 值的字符串。

destinations

指定安装目标路径的 JSON 数组项。每个项都是一个带有成员的 JSON 对象

path

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

backtrace

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

启动程序

在项目中指定了至少一个启动程序的可执行目标上出现的可选成员。其值是与指定启动程序相对应的条目 JSON 数组。每个条目都是一个带有成员的 JSON 对象

命令

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

自变量

当启动程序命令在要启动的可执行文件之前有参数时出现的可选成员。其值是表示参数的字符串 JSON 数组。

type

用于指定启动程序类型的字符串。其值是以下值之一

模拟器

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

测试

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

此字段已添加至 codemodel 2.7 版本中。

链接

链接到运行时二进制文件的可执行文件和共享库目标的可选成员。其值是描述链接步骤的 JSON 对象,且带有成员

语言

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

命令片段

当存在链接命令行调用的片段时出现的可选成员。其值是指定有序片段的条目 JSON 数组。每个条目都是一个带有成员的 JSON 对象

片段

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

角色

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

  • 标志:链接标志。

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

  • 库路径:库搜索路径标志。

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

链接时优化

当启用链接时优化(也称为过程间优化或链接时代码生成)时,带有布尔值 true 的可选成员。

根系统

CMAKE_SYSROOT_LINKCMAKE_SYSROOT 变量定义时存在的可选成员。该值是一个包含一个成员的 JSON 对象

path

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

归档

对于静态库目标存在的可选成员。该值是一个包含描述归档步骤的成员的 JSON 对象

命令片段

在归档器命令行调用的碎片可用时存在的可选成员。该值是一个指定碎片的 JSON 数组的条目。每个条目都是一个 JSON 对象,包含成员

片段

指定归档器命令行调用碎片的字符串。该值使用构建系统的本机 shell 格式进行编码。

角色

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

  • flags: 归档器标志。

链接时优化

当启用链接时优化(也称为过程间优化或链接时代码生成)时,带有布尔值 true 的可选成员。

依赖

当目标依赖于其他目标时存在的可选成员。该值是一个 JSON 数组的条目对应于依赖项。每个条目都是一个 JSON 对象,包含成员

id

唯一标识此目标所依赖的目标的字符串。这与其他目标的 main id 成员相匹配。

backtrace

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

文件集

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

name

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

type

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

可见性

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

基本目录

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

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

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

path

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

compileGroupIndex

编译源文件时出现的可选成员。该值是不带符号的 0 基索引,指向 compileGroups 数组。

sourceGroupIndex

通过 source_group() 命令或默认方式成为源组一部分时,出现的可选成员。该值是不带符号的 0 基索引,指向 sourceGroups 数组。

isGenerated

如果源是 GENERATED,则带有布尔值 true 的可选成员。

fileSetIndex

源是文件组一部分时出现的可选成员。该值是不带符号的 0 基索引,指向 fileSets 数组。

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

backtrace

当到 target_sources()add_executable()add_library()add_custom_target() 或添加此源到目标的其他命令调用的 CMake 语言回溯时出现的可选成员。该值是不带符号的 0 基索引,指向 backtraceGraph 成员的 nodes 数组。

sourceGroups

通过 source_group() 命令或默认方式将源分组在一起时出现的可选成员。该值是与组相应的条目的 JSON 数组。每个条目都是一个 JSON 对象,其成员为

name

指定组名称的字符串。

sourceIndexes

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

compileGroups

目标有可编译源时存在的可选成员。值是一个 JSON 数组,其中包含对应于使用相同设置编译的所有源的组的条目。每个条目是一个带有成员的 JSON 对象:

sourceIndexes

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

语言

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

languageStandard

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

backtraces

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

standard

表示语言标准的字符串。

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

compileCommandFragments

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

片段

指定编译器命令行调用片段的字符串。值在构建系统的本机 shell 格式中进行编码。

includes

当存在 include 目录时存在的可选成员。值是一个 JSON 数组,其中为每个目录提供一个条目。每个条目是一个带有成员的 JSON 对象:

path

指定 include 目录的路径的字符串,用正斜杠表示。

isSystem

当 include 目录被标记为系统 include 目录时存在的可选成员,布尔值 true

backtrace

当 CMake 语言回溯到 target_include_directories() 或添加此 include 目录的其他命令调用时存在的可选成员。值是一个无符号整数的 0 基于索引,该索引进入 backtraceGraph 成员的 nodes 数组。

frameworks

当在 Apple 平台上存在框架时存在的可选成员。值是一个 JSON 数组,其中为每个目录提供一个条目。每个条目是一个带有成员的 JSON 对象:

path

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

isSystem

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

backtrace

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

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

precompileHeaders

target_precompile_headers() 或其他命令调用在目标上设置 PRECOMPILE_HEADERS 时存在的可选成员。该值是一个 JSON 数组,其中每项对应一个头。每项都是一个 JSON 对象,该对象具有以下成员

header

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

backtrace

当查找 target_precompile_headers() 或其他添加此预编译标头命令调用时的 CMake 语言回溯时存在的可选成员,并且该变量可用。该值是一个无符号的基于 0 的整数索引,指向 backtraceGraph 成员的 nodes 数组。

在 codemodel 2.1 版中添加了此字段。

defines

当存在预处理器定义时存在的可选成员。该值是一个 JSON 数组,其中每项对应一个定义。每项都是一个 JSON 对象,该对象具有以下成员

define

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

backtrace

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

根系统

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

一个无符号的基于 0 的整数索引,指向回溯 files 数组。

line

当该节点表示文件中的某一行时存在的可选成员。该值是一个无符号的基于 1 的行号。

命令

当节点表示文件中的命令调用时,可选择性成员。该值是一个无符号整数,索引到回溯 commands 阵列的 0 为基数。

parent

当节点不是调用堆栈底部时,可选择性成员。该值是一个无符号整数,索引到回溯 nodes 阵列的另一个条目的 0 为基数。

commands

罗列回溯节点引用的命令名称的 JSON 阵列。每个条目都用一个指定命令名称的字符串。

files

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

对象种类“configureLog”

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

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

“configureLog”版本 1

configureLog 对象版本 1 是一个 JSON 对象

{
  "kind": "configureLog",
  "version": { "major": 1, "minor": 0 },
  "path": "/path/to/top-level-build-dir/CMakeFiles/CMakeConfigureLog.yaml",
  "eventKindNames": [ "try_compile-v1", "try_run-v1" ]
}

具体到 configureLog 对象的成员是

path

logPath

指定到 configure 日志文件路径的字符串。客户端必须从此路径读取日志文件,该路径可能不同于 cmake-configure-log(7) 中记录的路径。如果没有记录事件,日志文件可能不存在。

eventKindNames

每个条目都是一个 JSON 字符串,命名 cmake-configure-log(7) 版本事件种类之一的 JSON 阵列。最多将会列出每个 configure 日志事件种类的其中一个版本。尽管 configure 日志可能包含其他(版本)事件种类,客户端必须忽略未列在此字段中的这些事件种类。

对象种类“cache”

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

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

缓存对象版本 2 是一个 JSON 对象

{
  "kind": "cache",
  "version": { "major": 2, "minor": 0 },
  "entries": [
    {
      "name": "BUILD_SHARED_LIBS",
      "value": "ON",
      "type": "BOOL",
      "properties": [
        {
          "name": "HELPSTRING",
          "value": "Build shared libraries"
        }
      ]
    },
    {
      "name": "CMAKE_GENERATOR",
      "value": "Unix Makefiles",
      "type": "INTERNAL",
      "properties": [
        {
          "name": "HELPSTRING",
          "value": "Name of generator."
        }
      ]
    }
  ]
}

特定于缓存对象的成员包括

条目

JSON 数组,其中的每个条目都是一个 JSON 对象,用于指定缓存条目。每个条目的成员包括

name

指定条目名称的字符串。

指定条目值的字符串。

type

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

属性

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

name

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

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

对象类型“cmakeFiles”

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

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

“cmakeFiles”版本 1

cmakeFiles对象版本 1 是一个 JSON 对象

{
  "kind": "cmakeFiles",
  "version": { "major": 1, "minor": 1 },
  "paths": {
    "build": "/path/to/top-level-build-dir",
    "source": "/path/to/top-level-source-dir"
  },
  "inputs": [
    {
      "path": "CMakeLists.txt"
    },
    {
      "isGenerated": true,
      "path": "/path/to/top-level-build-dir/.../CMakeSystem.cmake"
    },
    {
      "isExternal": true,
      "path": "/path/to/external/third-party/module.cmake"
    },
    {
      "isCMake": true,
      "isExternal": true,
      "path": "/path/to/cmake/Modules/CMakeGenericSystem.cmake"
    }
  ],
  "globsDependent": [
    {
      "expression": "src/*.cxx",
      "recurse": true,
      "files": [
        "src/foo.cxx",
        "src/bar.cxx"
      ]
    }
  ]
}

特定于cmakeFiles对象的成员包括

paths

包含以下成员的 JSON 对象

source

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

build

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

输入

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

path

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

isGenerated

如果路径指定了位于顶层构建目录下且构建为非源内构建的文件,则存在可选成员,其中布尔值 true。此成员在源内构建中不可用。

isExternal

如果路径指定了不位于顶层源目录或构建目录下的文件,则存在可选成员,其中布尔值 true。p

isCMake

如果路径指定了 CMake 安装中的文件,则存在可选成员,其中布尔值 true

globsDependent

当项目调用 file(GLOB)file(GLOB_RECURSE)CONFIGURE_DEPENDS 选项时,呈现此可选成员。该值是 JSON 对象的 JSON 数组,分别指定一个全局匹配表达式及其匹配的路径列表。如果全局匹配表达式不再匹配相同的路径列表,则 CMake 认为构建系统已过期。

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

每个条目的成员包括:

表达式

指定全局匹配表达式的字符串。

递归

如果此条目对应 file(GLOB_RECURSE) 调用,则呈现此布尔值 true 的可选成员。否则,此条目对应 file(GLOB) 调用。

列出目录

如果未调用 LIST_DIRECTORIES false,或在 LIST_DIRECTORIES true 中调用 file(GLOB),则呈现此布尔值 true 的可选成员 file(GLOB_RECURSE)

关注符号链接

如果使用 FOLLOW_SYMLINKS 选项调用 file(GLOB),则呈现此布尔值 true 的可选成员。

相对

如果使用 RELATIVE <path> 选项调用 file(GLOB),则呈现此可选成员。该值是一个字符串,包含给定的 <path>

paths

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

对象类型 "toolchains"

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

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

版本 1 的 "toolchains"

版本 1 的 toolchains 对象是一个 JSON 对象

{
  "kind": "toolchains",
  "version": { "major": 1, "minor": 0 },
  "toolchains": [
    {
      "language": "C",
      "compiler": {
        "path": "/usr/bin/cc",
        "id": "GNU",
        "version": "9.3.0",
        "implicit": {
          "includeDirectories": [
            "/usr/lib/gcc/x86_64-linux-gnu/9/include",
            "/usr/local/include",
            "/usr/include/x86_64-linux-gnu",
            "/usr/include"
          ],
          "linkDirectories": [
            "/usr/lib/gcc/x86_64-linux-gnu/9",
            "/usr/lib/x86_64-linux-gnu",
            "/usr/lib",
            "/lib/x86_64-linux-gnu",
            "/lib"
          ],
          "linkFrameworkDirectories": [],
          "linkLibraries": [ "gcc", "gcc_s", "c", "gcc", "gcc_s" ]
        }
      },
      "sourceFileExtensions": [ "c", "m" ]
    },
    {
      "language": "CXX",
      "compiler": {
        "path": "/usr/bin/c++",
        "id": "GNU",
        "version": "9.3.0",
        "implicit": {
          "includeDirectories": [
            "/usr/include/c++/9",
            "/usr/include/x86_64-linux-gnu/c++/9",
            "/usr/include/c++/9/backward",
            "/usr/lib/gcc/x86_64-linux-gnu/9/include",
            "/usr/local/include",
            "/usr/include/x86_64-linux-gnu",
            "/usr/include"
          ],
          "linkDirectories": [
            "/usr/lib/gcc/x86_64-linux-gnu/9",
            "/usr/lib/x86_64-linux-gnu",
            "/usr/lib",
            "/lib/x86_64-linux-gnu",
            "/lib"
          ],
          "linkFrameworkDirectories": [],
          "linkLibraries": [
            "stdc++", "m", "gcc_s", "gcc", "c", "gcc_s", "gcc"
          ]
        }
      },
      "sourceFileExtensions": [
        "C", "M", "c++", "cc", "cpp", "cxx", "mm", "CPP"
      ]
    }
  ]
}

特定于 toolchains 对象的成员为

toolchains

其条目均为 JSON 对象的 JSON 数组,指定与特定语言关联的工具链。每个条目的成员为

语言

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

compiler

包含以下成员的 JSON 对象

path

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

id

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

版本

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

target

CMAKE_<LANG>_COMPILER_TARGET 变量对当前语言已定义时存在的可选成员。其值为包含编译器的交叉编译目标的 JSON 字符串。

implicit

包含以下成员的 JSON 对象

includeDirectories

CMAKE_<LANG>_IMPLICIT_INCLUDE_DIRECTORIES 变量对当前语言已定义时存在的可选成员。其值为 JSON 字符串的 JSON 数组,其中每个字符串都包含编译器的隐式包含目录路径。

linkDirectories

CMAKE_<LANG>_IMPLICIT_LINK_DIRECTORIES 变量对当前语言已定义时存在的可选成员。其值为 JSON 字符串的 JSON 数组,其中每个字符串都包含编译器的隐式链接目录路径。

linkFrameworkDirectories

在为当前语言定义了 CMAKE_<LANG>_IMPLICIT_LINK_FRAMEWORK_DIRECTORIES 变量时,此选项成员才会出现。其值是 JSON 字符串的 JSON 数组,其中每个字符串保存一条指向编译器隐式链接框架目录的路径。

linkLibraries

在为当前语言定义了 CMAKE_<LANG>_IMPLICIT_LINK_LIBRARIES 变量时,此选项成员才会出现。其值是 JSON 字符串的 JSON 数组,其中每个字符串保存一条指向编译器隐式链接库的路径。

sourceFileExtensions

在为当前语言定义了 CMAKE_<LANG>_SOURCE_FILE_EXTENSIONS 变量时,此选项成员才会出现。其值是 JSON 字符串的 JSON 数组,其中每个字符串保存一个此语言的文件扩展名(不含前导点)。