cmake-file-api(7)¶
简介¶
CMake 提供一个基于文件的 API,客户端可以使用它来获取 CMake 生成的构建系统的语义信息。客户端可以通过向构建树中的特定位置写入查询文件来请求零个或多个对象类型。当 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-*.jsonCMake 生成构建系统时写入的 v1 回复索引文件。
error-*.json在 4.1 版本中新增。
CMake 由于错误而未能生成构建系统时写入的 v1 回复错误索引。
客户端可以随时查找并读取回复索引。客户端可以选择随时创建
reply/目录并监视其是否出现新的回复索引。CMake 拥有所有回复文件。客户端绝不能删除它们。
版本 3.31 新增:用户可以将查询文件添加到 CMAKE_CONFIG_DIR 内的 api/v1/query 中,为所有 CMake 项目创建用户范围的查询。
v1 客户端无状态查询文件¶
客户端无状态查询文件允许客户端创建对对象类型主要版本的自有请求,并获取运行的 CMake 识别的所有请求版本。
客户端可以通过在客户端特定的查询子目录中创建空文件来创建自有请求。形式为
<build>/.cmake/api/v1/query/client-<client>/<kind>-v<major>
其中 client- 是字面量,<client> 是唯一标识客户端的字符串,<kind> 是对象类型之一,-v 是字面量,<major> 是主要版本号。每个客户端必须通过自己的方式选择一个唯一的 <client> 标识符。
此形式的文件是客户端 <client> 拥有的无状态查询。所有者客户端可以随时删除它们。
v1 客户端有状态查询文件¶
有状态查询文件允许客户端请求对象类型的多个版本,并且只获取运行的 CMake 识别的最新版本。
客户端可以通过在客户端特定的查询子目录中创建 query.json 文件来创建自有有状态查询。形式为
<build>/.cmake/api/v1/query/client-<client>/query.json
其中 client- 是字面量,<client> 是唯一标识客户端的字符串,query.json 是字面量。每个客户端必须通过自己的方式选择一个唯一的 <client> 标识符。
query.json 文件是由客户端 <client> 拥有的有状态查询。拥有者客户端可以随时更新或删除它们。当给定的客户端安装更新时,它可以更新写入构建树的有状态查询以请求较新的对象版本。这可以避免不必要地要求 CMake 生成多个对象版本。
一个 query.json 文件必须包含一个 JSON 对象
{
"requests": [
{ "kind": "<kind>" , "version": 1 },
{ "kind": "<kind>" , "version": { "major": 1, "minor": 2 } },
{ "kind": "<kind>" , "version": [2, 1] },
{ "kind": "<kind>" , "version": [2, { "major": 1, "minor": 2 }] },
{ "kind": "<kind>" , "version": 1, "client": {} },
{ "kind": "..." }
],
"client": {}
}
成员是
requests一个包含零个或多个请求的 JSON 数组。每个请求都是一个 JSON 对象,包含以下成员
种类指定要包含在回复中的对象类型之一。
版本指示客户端理解的对象类型的版本。版本具有遵循语义版本约定的主要和次要组件。值必须是
指定(非负)主要版本号的 JSON 整数,或
包含
major和(可选)minor成员的 JSON 对象,指定非负整数版本组件,或一个 JSON 数组,其元素均为上述之一。
client可选成员,保留供客户端使用。此值在写入给客户端的 v1 回复索引文件的回复中保留,但除此之外被忽略。客户端可以使用此功能将自定义信息与请求一起传递到其回复中。
对于每个请求的对象类型,CMake 将在其请求中列出的版本中选择它识别的该类型的第一个版本。响应将使用选定的主要版本和运行中的 CMake 已知的该主要版本的最高次要版本。因此,客户端应按首选顺序列出所有支持的主要版本以及每个主要版本所需的最低次要版本。
client可选成员,保留供客户端使用。此值在写入给客户端的 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一个 JSON 对象,包含有关生成回复的 CMake 实例的信息。它包含成员
版本一个 JSON 对象,指定 CMake 版本,包含成员
major,minor,patch整数值,指定主版本、次版本和补丁版本组件。
suffix一个字符串,指定版本后缀(如果有),例如
g0abc3。string一个字符串,指定格式为
<major>.<minor>.<patch>[-<suffix>]的完整版本。isDirty一个布尔值,指示版本是否从具有本地修改的版本控制源树构建。
paths一个 JSON 对象,指定 CMake 附带的工具的路径。它包含 cmake、ctest 和 cpack 的成员,其值是指定每个工具的绝对路径的 JSON 字符串,以正斜杠表示。它还包含一个
root成员,用于包含 CMake 资源(如Modules/目录)的目录的绝对路径(参见CMAKE_ROOT)。generator一个 JSON 对象,描述用于构建的 CMake 生成器。它包含成员
multiConfig一个布尔值,指定生成器是否支持多个输出配置。
名称一个字符串,指定生成器的名称。
platform如果生成器支持
CMAKE_GENERATOR_PLATFORM,则这是一个字符串,指定生成器平台名称。
objectsreply一个 JSON 对象,镜像 CMake 加载以生成回复的
query/目录的内容。成员的形式为<kind>-v<major>对于 CMake 识别为对象类型
<kind>且主要版本为<major>的每个 v1 共享无状态查询文件,都会出现此形式的成员。其值为<unknown>对于 CMake 未识别的每个 v1 共享无状态查询文件,都会出现此形式的成员。其值是一个 JSON 对象,其中包含一个
error成员,其中包含一个字符串,指示查询文件未知。client-<client>对于每个包含 v1 客户端无状态查询文件的客户端拥有目录,都会出现此形式的成员。其值是一个 JSON 对象,镜像
query/client-<client>/目录的内容。成员的形式为<kind>-v<major>对于 CMake 识别为对象类型
<kind>且主要版本为<major>的每个 v1 客户端无状态查询文件,都会出现此形式的成员。其值为<unknown>对于 CMake 未识别的每个 v1 客户端无状态查询文件,都会出现此形式的成员。其值是一个 JSON 对象,其中包含一个
error成员,其中包含一个字符串,指示查询文件未知。query.json此成员出现在使用 v1 客户端有状态查询文件的客户端中。如果
query.json文件读取或解析为 JSON 对象失败,则此成员是一个 JSON 对象,其中包含一个error成员,其中包含错误消息字符串。否则,此成员是一个 JSON 对象,镜像query.json文件的内容。成员为clientquery.json文件client成员的副本(如果存在)。requestsquery.json文件requests成员的副本(如果存在)。responses如果
query.json文件requests成员缺失或无效,则此成员是一个 JSON 对象,其中包含一个error成员,其中包含错误消息字符串。否则,此成员包含一个 JSON 数组,其中包含requests数组中每个条目的响应,顺序相同。每个响应是对应于所请求对象类型和所选版本的回复文件的 v1 回复文件引用,或
一个 JSON 对象,其中包含一个
error成员,其中包含错误消息字符串。
读取回复索引文件后,客户端可以读取它引用的其他 v1 回复文件。
v1 回复文件引用¶
回复索引文件使用一个 JSON 对象表示对另一个回复文件的每个引用,该 JSON 对象包含以下成员
种类一个字符串,指定对象类型之一。
版本一个 JSON 对象,包含
major和minor成员,指定对象类型的整数版本组件。jsonFile一个 JSON 字符串,指定相对于回复索引文件到包含对象的另一个 JSON 文件的路径。
v1 回复错误索引¶
在 4.1 版本中新增。
CMake 在未能生成构建系统时,会将 error-*.json 文件写入 v1/reply/ 目录。此回复错误索引遵循与 v1 回复索引文件相同的命名模式、语法和语义,但以下情况除外
index-前缀被error-前缀替换。当生成新的错误索引时,旧的索引文件不会被删除。如果存在 v1 回复索引文件,它会索引最近成功运行的回复。如果存在多个
index-*.json和/或error-*.json文件,则按字典顺序,排除index-或error-前缀,名称最大的文件是当前索引。仅提供了对象类型的一个子集
- configureLog
在 4.1 版本中新增。
其他对象类型的索引条目包含
error消息而不是 v1 回复文件引用。
v1 回复文件¶
包含特定对象类型的回复文件由 CMake 写入。这些文件的名称未指定,客户端不得解释。客户端必须首先读取v1 回复索引文件,并遵循对所需响应对象名称的引用。
回复文件(包括索引文件)绝不会被同名但内容不同的文件替换。这允许客户端在运行中的 CMake 可能生成新回复的同时读取文件。然而,在生成新回复后,CMake 将尝试删除它未写入的先前运行的回复文件。如果客户端尝试读取索引引用的回复文件但发现文件缺失,则表示并发的 CMake 已生成新回复。客户端可以简单地通过读取新的回复索引文件重新开始。
对象类型¶
CMake 基于文件的 API 使用以下 JSON 对象类型报告关于构建系统的语义信息。每种对象类型都使用语义版本控制(包含主版本和次版本组件)独立版本化。每种对象类型都具有以下形式
{
"kind": "<kind>",
"version": { "major": 1, "minor": 0 },
"...": {}
}
kind 成员是一个字符串,指定对象类型名称。version 成员是一个 JSON 对象,其中包含 major 和 minor 成员,指定对象类型版本的整数组件。其他顶层成员特定于每种对象类型。
对象类型 "codemodel"¶
codemodel 对象类型描述了 CMake 建模的构建系统结构。
codemodel 对象只有一个主要版本,即版本 2。版本 1 不存在,以避免与 cmake-server(7) 模式混淆。
"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 ],
"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 对象,包含成员
源一个字符串,指定顶层源目录的绝对路径,以正斜杠表示。
构建一个字符串,指定顶层构建目录的绝对路径,以正斜杠表示。
configurations一个 JSON 数组,其条目对应于可用的构建配置。在单配置生成器上,有一个条目用于
CMAKE_BUILD_TYPE变量的值。对于多配置生成器,CMAKE_CONFIGURATION_TYPES变量中列出的每个配置都有一个条目。每个条目都是一个 JSON 对象,包含成员名称一个字符串,指定配置的名称,例如
Debug。directories一个 JSON 数组,每个条目对应于其源目录包含
CMakeLists.txt文件的构建系统目录。第一个条目对应于顶层目录。每个条目都是一个 JSON 对象,包含成员源一个字符串,指定源目录的路径,以正斜杠表示。如果目录在顶层源目录内,则路径相对于该目录指定(对于顶层源目录本身,为
.)。否则路径是绝对路径。构建一个字符串,指定构建目录的路径,以正斜杠表示。如果目录在顶层构建目录内,则路径相对于该目录指定(对于顶层构建目录本身,为
.)。否则路径是绝对路径。parentIndex可选成员,当目录不是顶层目录时存在。该值是主
directories数组中另一个条目的无符号整数 0 基索引,该条目对应于添加此目录作为子目录的父目录。childIndexes可选成员,当目录有子目录时存在。该值是一个 JSON 数组,其中包含由
add_subdirectory()或subdirs()命令创建的子目录条目。每个条目都是主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或等效规则可用。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 基索引。
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 文件的路径。
"codemodel" 版本 2 "directory" 对象¶
一个 codemodel "directory" 对象由 "codemodel" 版本 2 对象的 directories 数组引用。每个 "directory" 对象都是一个 JSON 对象,包含成员
paths一个 JSON 对象,包含成员
源一个字符串,指定源目录的路径,以正斜杠表示。如果目录在顶层源目录内,则路径相对于该目录指定(对于顶层源目录本身,为
.)。否则路径是绝对路径。构建一个字符串,指定构建目录的路径,以正斜杠表示。如果目录在顶层构建目录内,则路径相对于该目录指定(对于顶层构建目录本身,为
.)。否则路径是绝对路径。
installers一个 JSON 数组,其条目对应于
install()规则。每个条目都是一个 JSON 对象,包含成员component一个字符串,指定由相应的
install()命令调用选择的组件。destination可选成员,存在于某些
type值下方。该值是一个字符串,指定安装目标路径。路径可以是绝对路径或相对于安装前缀的相对路径。paths可选成员,存在于某些
type值下方。该值是一个 JSON 数组,其条目对应于要安装的路径(文件或目录)。每个条目都是以下之一一个字符串,指定要安装的文件或目录的来源路径。路径中不带
/的部分也指定了文件或目录要安装到目标路径下的路径(名称)。一个 JSON 对象,包含成员
from一个字符串,指定要安装的文件或目录的来源路径。
到一个字符串,指定文件或目录要安装到目标路径下的路径。
在这两种情况下,路径都以正斜杠表示。如果“来源”路径位于对应
type值文档的顶层目录内,则路径相对于该目录指定。否则路径是绝对路径。type一个字符串,指定安装规则的类型。该值是以下之一,其中一些变体提供额外的成员
file一个
install(FILES)或install(PROGRAMS)调用。destination和paths成员已填充,其中顶层源目录下的路径相对于该目录表示。isOptional成员可能存在。此类型没有额外的成员。directory一个
install(DIRECTORY)调用。destination和paths成员已填充,其中顶层源目录下的路径相对于该目录表示。isOptional成员可能存在。此类型没有额外的成员。目标一个
install(TARGETS)调用。destination和paths成员已填充,其中顶层构建目录下的路径相对于该目录表示。isOptional成员可能存在。此类型具有额外的成员targetId、targetIndex、targetIsImportLibrary和targetInstallNamelink。export一个
install(EXPORT)调用。destination和paths成员已填充,其中顶层构建目录下的路径相对于该目录表示。paths条目引用 CMake 自动生成的用于安装的文件,它们的实际值被视为私有实现细节。此类型具有额外的成员exportName和exportTargets。script一个
install(SCRIPT)调用。此类型具有额外的成员scriptFile。code一个
install(CODE)调用。此类型没有额外的成员。importedRuntimeArtifacts一个
install(IMPORTED_RUNTIME_ARTIFACTS)调用。destination成员已填充。isOptional成员可能存在。此类型没有额外的成员。runtimeDependencySet一个
install(RUNTIME_DEPENDENCY_SET)调用或带有RUNTIME_DEPENDENCIES的install(TARGETS)调用。destination成员已填充。此类型具有额外的成员runtimeDependencySetName和runtimeDependencySetType。fileSet一个
install(TARGETS)调用,带有FILE_SET。destination和paths成员已填充。isOptional成员可能存在。此类型具有额外的成员fileSetName、fileSetType、fileSetDirectories和fileSetTarget。此类型在 codemodel 版本 2.4 中添加。
cxxModuleBmi一个
install(TARGETS)调用,带有CXX_MODULES_BMI。destination成员已填充,isOptional成员可能存在。此类型具有额外的cxxModuleBmiTarget成员。此类型在 codemodel 版本 2.5 中添加。
isExcludeFromAll可选成员,当
install()调用时带有EXCLUDE_FROM_ALL选项时,其布尔值为true。isForAllComponents可选成员,当
install(SCRIPT|CODE)调用时带有ALL_COMPONENTS选项时,其布尔值为true。isOptional可选成员,当
install()调用时带有OPTIONAL选项时,其布尔值为true。这在type为file、directory或target时允许。targetId可选成员,当
type为target时存在。该值是一个字符串,唯一标识要安装的目标。这与主 "codemodel" 对象的targets数组中目标的id成员匹配。targetIndex可选成员,当
type为target时存在。该值是主 "codemodel" 对象的targets数组中要安装的目标的无符号整数 0 基索引。targetIsImportLibrary可选成员,当
type为target且安装程序用于 Windows DLL 导入库文件或 AIX 链接器导入文件时存在。如果存在,其布尔值为true。targetInstallNamelink可选成员,当
type为target且安装程序对应于可能使用符号链接来实现VERSION和SOVERSION目标属性的目标时存在。该值是一个字符串,指示安装程序应如何处理符号链接:skip表示安装程序应跳过符号链接并仅安装实际文件,only表示安装程序应仅安装符号链接而不安装实际文件。在所有情况下,paths成员列出实际安装的内容。exportName可选成员,当
type为export时存在。该值是一个字符串,指定导出的名称。exportTargets可选成员,当
type为export时存在。该值是一个 JSON 数组,其中包含对应于导出中包含的目标的条目。每个条目都是一个 JSON 对象,包含成员id一个字符串,唯一标识目标。这与主 "codemodel" 对象的
targets数组中目标的id成员匹配。索引主 "codemodel" 对象的
targets数组中目标的无符号整数 0 基索引。
runtimeDependencySetName可选成员,当
type为runtimeDependencySet且安装程序由install(RUNTIME_DEPENDENCY_SET)调用创建时存在。该值是一个字符串,指定已安装的运行时依赖项集的名称。runtimeDependencySetType可选成员,当
type为runtimeDependencySet时存在。该值是一个字符串,具有以下值之一library表示此安装程序安装的依赖项不是 macOS 框架。
framework表示此安装程序安装的依赖项是 macOS 框架。
fileSetName可选成员,当
type为fileSet时存在。该值是一个字符串,表示文件集的名称。此字段在 codemodel 版本 2.4 中添加。
fileSetType可选成员,当
type为fileSet时存在。该值是一个字符串,表示文件集的类型。此字段在 codemodel 版本 2.4 中添加。
fileSetDirectories可选成员,当
type为fileSet时存在。该值是文件集基本目录的字符串列表(由HEADER_DIRS或HEADER_DIRS_<NAME>的 genex 评估确定)。此字段在 codemodel 版本 2.4 中添加。
fileSetTarget可选成员,当
type为fileSet时存在。该值是一个 JSON 对象,包含成员id一个字符串,唯一标识目标。这与主 "codemodel" 对象的
targets数组中目标的id成员匹配。索引主 "codemodel" 对象的
targets数组中目标的无符号整数 0 基索引。
此字段在 codemodel 版本 2.4 中添加。
cxxModuleBmiTarget可选成员,当
type为cxxModuleBmi时存在。该值是一个 JSON 对象,包含成员id一个字符串,唯一标识目标。这与主 "codemodel" 对象的
targets数组中目标的id成员匹配。索引主 "codemodel" 对象的
targets数组中目标的无符号整数 0 基索引。
此字段在 codemodel 版本 2.5 中添加。
scriptFile可选成员,当
type为script时存在。该值是一个字符串,指定脚本文件在磁盘上的路径,以正斜杠表示。如果文件在顶层源目录内,则路径相对于该目录指定。否则路径是绝对路径。回溯可选成员,当存在指向添加此安装程序的
install()或其他命令调用的 CMake 语言回溯时存在。该值是backtraceGraph成员的nodes数组的无符号整数 0 基索引。
backtraceGraph一个 "codemodel" 版本 2 "回溯图",其节点在此 "directory" 对象中其他地方的
backtrace成员中引用。
"codemodel" 版本 2 "target" 对象¶
一个 codemodel "target" 对象由 "codemodel" 版本 2 对象的 targets 数组引用。每个 "target" 对象都是一个 JSON 对象,包含成员
名称一个字符串,指定目标的逻辑名称。
id一个字符串,唯一标识目标。格式未指定,不应由客户端解释。
type一个字符串,指定目标的类型。值为
EXECUTABLE、STATIC_LIBRARY、SHARED_LIBRARY、MODULE_LIBRARY、OBJECT_LIBRARY、INTERFACE_LIBRARY或UTILITY之一。回溯可选成员,当存在指向创建目标的源代码中命令的 CMake 语言回溯时存在。该值是
backtraceGraph成员的nodes数组的无符号整数 0 基索引。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 语言回溯时存在。该值是backtraceGraph成员的nodes数组的无符号整数 0 基索引。
launchers可选成员,当可执行目标至少有一个项目指定的启动器时存在。该值是一个 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 语言回溯时存在。该值是backtraceGraph成员的nodes数组的无符号整数 0 基索引。
lto可选成员,当启用链接时优化(也称为过程间优化或链接时代码生成)时,其布尔值为
true。sysroot可选成员,当定义了
CMAKE_SYSROOT_LINK或CMAKE_SYSROOT变量时存在。该值是一个 JSON 对象,包含一个成员path一个字符串,指定 sysroot 的绝对路径,以正斜杠表示。
archive可选成员,存在于静态库目标。该值是一个 JSON 对象,其中包含描述归档步骤的成员
commandFragments可选成员,当归档器命令行调用的片段可用时存在。该值是一个 JSON 数组,其中包含指定片段的条目。每个条目都是一个 JSON 对象,包含成员
fragment一个字符串,指定归档器命令行调用的片段。该值以构建系统的本地 shell 格式编码。
role一个字符串,指定片段内容的角色
flags:归档器标志。
lto可选成员,当启用链接时优化(也称为过程间优化或链接时代码生成)时,其布尔值为
true。
debugger可选成员,当目标设置了以下字段之一时存在。该值是一个 JSON 对象,其中包含对应于调试器特定设置值的条目。
此字段在 codemodel 版本 2.8 中添加。
workingDirectory可选成员,当
DEBUGGER_WORKING_DIRECTORY目标属性设置时存在。当VS_DEBUGGER_WORKING_DIRECTORY设置时,也会在Visual Studio Generators中存在该成员。此字段在 codemodel 版本 2.8 中添加。
dependencies可选成员,当目标依赖于其他目标时出现。该值是一个 JSON 数组,包含对应于依赖项的条目。每个条目都是一个 JSON 对象,包含成员:
id一个字符串,唯一标识此目标所依赖的目标。这与另一个目标的主要
id成员匹配。回溯可选成员,当可用于创建此依赖项的 CMake 语言回溯到
add_dependencies()、target_link_libraries()或其他命令调用时出现。该值是一个无符号整数,表示backtraceGraph成员的nodes数组中基于 0 的索引。
fileSets可选成员,当目标定义了一个或多个文件集时出现。该值是一个 JSON 数组,包含对应于目标文件集的条目。每个条目都是一个 JSON 对象,包含成员:
名称一个字符串,指定文件集的名称。
type一个字符串,指定文件集的类型。参见
target_sources()支持的文件集类型。visibility一个字符串,指定文件集的可见性;可以是
PUBLIC、PRIVATE或INTERFACE之一。baseDirectories一个 JSON 字符串数组,每个字符串指定文件集中包含源文件的基本目录。如果目录位于顶级源目录内,则路径相对于该目录指定。否则,路径是绝对路径。
此字段在 codemodel 版本 2.5 中添加。
sources一个 JSON 数组,包含对应于目标源文件的条目。每个条目都是一个 JSON 对象,包含成员:
path一个字符串,指定磁盘上源文件的路径,用正斜杠表示。如果文件位于顶级源目录内,则路径相对于该目录指定。否则,路径是绝对路径。
compileGroupIndex可选成员,当源文件被编译时出现。该值是一个无符号整数,表示
compileGroups数组中基于 0 的索引。sourceGroupIndex可选成员,当源文件通过
source_group()命令或默认情况下属于源组时出现。该值是一个无符号整数,表示sourceGroups数组中基于 0 的索引。isGenerated可选成员,当源文件为
GENERATED时,其布尔值为true。fileSetIndex可选成员,当源文件属于文件集时出现。该值是一个无符号整数,表示
fileSets数组中基于 0 的索引。此字段在 codemodel 版本 2.5 中添加。
回溯可选成员,当可用于创建此源文件依赖项的 CMake 语言回溯到
target_sources()、add_executable()、add_library()、add_custom_target()或其他命令调用时出现。该值是一个无符号整数,表示backtraceGraph成员的nodes数组中基于 0 的索引。
sourceGroups可选成员,当源文件通过
source_group()命令或默认情况下分组时出现。该值是一个 JSON 数组,包含对应于组的条目。每个条目都是一个 JSON 对象,包含成员:名称一个字符串,指定源组的名称。
sourceIndexes一个 JSON 数组,列出属于该组的源文件。每个条目都是一个无符号整数,表示目标主要
sources数组中基于 0 的索引。
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 语言回溯可用时出现。该值是一个无符号整数,表示
backtraceGraph成员的nodes数组中基于 0 的索引。
includes可选成员,当存在包含目录时出现。该值是一个 JSON 数组,每个目录都有一个条目。每个条目都是一个包含成员的 JSON 对象:
path一个字符串,指定包含目录的路径,用正斜杠表示。
isSystem可选成员,当包含目录被标记为系统包含目录时,其布尔值为
true。回溯可选成员,当可用于添加此包含目录的 CMake 语言回溯到
target_include_directories()或其他命令调用时出现。该值是一个无符号整数,表示backtraceGraph成员的nodes数组中基于 0 的索引。
frameworks可选成员,当在 Apple 平台上存在框架时出现。该值是一个 JSON 数组,每个目录都有一个条目。每个条目都是一个包含成员的 JSON 对象:
path一个字符串,指定框架目录的路径,用正斜杠表示。
isSystem可选成员,当框架被标记为系统框架时,其布尔值为
true。回溯可选成员,当可用于添加此框架的 CMake 语言回溯到
target_link_libraries()或其他命令调用时出现。该值是一个无符号整数,表示backtraceGraph成员的nodes数组中基于 0 的索引。
此字段在 codemodel 版本 2.6 中添加。
precompileHeaders可选成员,当
target_precompile_headers()或其他命令调用在目标上设置PRECOMPILE_HEADERS时出现。该值是一个 JSON 数组,每个头文件都有一个条目。每个条目都是一个包含成员的 JSON 对象:header预编译头文件的完整路径。
回溯可选成员,当可用于添加此预编译头文件的 CMake 语言回溯到
target_precompile_headers()或其他命令调用时出现。该值是一个无符号整数,表示backtraceGraph成员的nodes数组中基于 0 的索引。
此字段在 codemodel 版本 2.1 中添加。
defines可选成员,当存在预处理器定义时出现。该值是一个 JSON 数组,每个定义都有一个条目。每个条目都是一个包含成员的 JSON 对象:
define一个字符串,指定格式为
<name>[=<value>]的预处理器定义,例如DEF或DEF=1。回溯可选成员,当可用于添加此预处理器定义的 CMake 语言回溯到
target_compile_definitions()或其他命令调用时出现。该值是一个无符号整数,表示backtraceGraph成员的nodes数组中基于 0 的索引。
sysroot可选成员,当定义了
CMAKE_SYSROOT_COMPILE或CMAKE_SYSROOT变量时出现。该值是一个包含一个成员的 JSON 对象:path一个字符串,指定 sysroot 的绝对路径,以正斜杠表示。
backtraceGraph一个 "codemodel" 版本 2 "回溯图",其节点在“target”对象的其他地方的
backtrace成员中引用。
"codemodel" 版本 2 "回溯图"¶
"codemodel" 版本 2 "目录" 对象或 "codemodel" 版本 2 "目标" 对象的 backtraceGraph 成员是一个 JSON 对象,描述了一个回溯图。其节点在包含对象的其他地方的 backtrace 成员中引用。回溯图对象成员是:
nodes一个 JSON 数组,列出回溯图中的节点。每个条目都是一个包含成员的 JSON 对象:
file一个无符号整数,表示回溯
files数组中基于 0 的索引。行一个可选成员,当节点表示文件中的一行时出现。该值是一个无符号整数,表示基于 1 的行号。
命令一个可选成员,当节点表示文件中的命令调用时出现。该值是一个无符号整数,表示回溯
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 对象,指定一个缓存条目。每个条目的成员是:
名称一个字符串,指定条目的名称。
value一个字符串,指定条目的值。
type一个字符串,指定
cmake-gui(1)用于选择编辑小部件的条目类型。属性一个 JSON 数组,包含指定关联 缓存条目属性 的条目。每个条目都是一个包含成员的 JSON 对象:
名称一个字符串,指定缓存条目属性的名称。
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一个 JSON 对象,包含成员
源一个字符串,指定顶层源目录的绝对路径,以正斜杠表示。
构建一个字符串,指定顶层构建目录的绝对路径,以正斜杠表示。
inputs一个 JSON 数组,其条目都是一个 JSON 对象,指定 CMake 在配置和生成构建系统时使用的输入文件。每个条目的成员是:
path一个字符串,指定 CMake 输入文件的路径,用正斜杠表示。如果文件位于顶级源目录内,则路径相对于该目录指定。否则,路径是绝对路径。
isGenerated可选成员,当路径指定的文件位于顶级构建目录下且构建是“外部源”时,其布尔值为
true。此成员在“内部源”构建中不可用。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一个 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一个 JSON 对象,包含成员
path可选成员,当为当前语言定义了
CMAKE_<LANG>_COMPILER变量时出现。其值是一个 JSON 字符串,包含编译器的路径。id可选成员,当为当前语言定义了
CMAKE_<LANG>_COMPILER_ID变量时出现。其值是一个 JSON 字符串,包含编译器的 ID(GNU、MSVC 等)。版本可选成员,当为当前语言定义了
CMAKE_<LANG>_COMPILER_VERSION变量时出现。其值是一个 JSON 字符串,包含编译器的版本。目标可选成员,当为当前语言定义了
CMAKE_<LANG>_COMPILER_TARGET变量时出现。其值是一个 JSON 字符串,包含编译器的交叉编译目标。implicit一个 JSON 对象,包含成员
includeDirectories可选成员,当为当前语言定义了
CMAKE_<LANG>_IMPLICIT_INCLUDE_DIRECTORIES变量时出现。其值是一个 JSON 字符串数组,其中每个字符串包含编译器隐式包含目录的路径。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 字符串数组,其中每个字符串包含语言的文件扩展名(不带前导点)。