cmake-file-api(7)
Введение
CMake предоставляет API на основе файлов, которое клиенты могут использовать для получения семантической информации о системах сборки, генерируемых CMake. Клиенты могут использовать API, записывая файлы запросов в определённом месте дерева сборки, чтобы запросить ноль или более типов объектов. Когда CMake генерирует систему сборки в этом дереве, она будет читать файлы запросов и записывать файлы ответов для чтения клиентом.
API на основе файлов использует директорию <build>/.cmake/api/ вверху дерева сборки. API имеет версионирование, чтобы поддерживать изменения в структуре файлов внутри директории API. Версионирование структуры файлов API ортогонально версионированию типов объектов, используемых в ответах. Эта версия CMake поддерживает только одну версию API, API v1.
API v1
API v1 размещён в директории <build>/.cmake/api/v1/. В ней есть следующие поддиректории:
-
query/ -
Содержит файлы запросов, написанные клиентами. Это могут быть v1 Общие бессостоятельные запросы файлов, v1 Бессостоятельные запросы файлов клиента или v1 Состоятельные запросы файлов клиента.
-
reply/ -
Содержит файлы ответов, которые записывает CMake при запуске для генерации системы сборки. Они индексируются файлом v1 Файл индекса ответов, который может ссылаться на дополнительные v1 Файлы ответов. CMake владеет всеми файлами ответов. Клиенты не должны их удалять.
Клиенты могут в любое время искать и читать файл индекса ответов. Клиенты могут по желанию создать директорию
reply/в любое время и отслеживать её появление нового файла индекса ответов.
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 записывает файл 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": {
"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. Он имеет члены для
cmake,ctest, иcpack, значения которых являются строками JSON, определяющими абсолютный путь к каждому инструменту, представленному с помощью обратных слешей. Также имеет членrootдля абсолютного пути к каталогу, содержащему ресурсы CMake, такие как каталогModules/(см.CMAKE_ROOT). -
generator -
Объект JSON, описывающий используемый генератор CMake. Он имеет члены:
-
name -
Строка, определяющая имя генератора.
-
platform -
Если генератор поддерживает
CMAKE_GENERATOR_PLATFORM, это строка, определяющая имя платформы генератора.
-
-
-
objects -
Массив JSON, перечисляющий все версии всех видов объектов, сгенерированных в рамках ответа. Каждый элемент массива — ссылка на файл ответа v1.
-
reply -
Объект JSON, отражающий содержимое каталога
query/, который CMake загрузил для получения ответа. Члены имеют вид:-
<kind>-v<major> -
Член такого вида появляется для каждого из файлов запросов v1 общего использования без состояния, которые CMake распознал как запрос для вида объекта
<kind>с основной версией<major>. Значение — ссылка на файл ответа v1 на соответствующий файл ответа для этого вида объекта и версии. -
<unknown> -
Член такого вида появляется для каждого из файлов запросов v1 общего использования без состояния, которые CMake не распознал. Значение — объект JSON с одним членом
error, содержащим строку с сообщением об ошибке, указывающей, что файл запроса неизвестен. -
client-<client> -
Член такого вида появляется для каждого каталога, принадлежащего клиенту, содержащего файлы запросов 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. Члены:-
client -
Копия файла
query.jsonчленclient, если он существует. -
requests -
Копия файла
query.jsonчленrequests, если он существует. -
responses -
Если член
query.jsonфайлаrequestsотсутствует или недействителен, этот член является объектом JSON с одним членомerror, содержащим строку с сообщением об ошибке. В противном случае этот член содержит массив JSON с ответом для каждой записи массиваrequests, в том же порядке. Каждый ответ:- является объектом JSON с одним членом
error, содержащим строку с сообщением об ошибке, или - является ссылкой на файл ответа v1 на соответствующий файл ответа для запрошенного вида объекта и выбранной версии.
- является объектом JSON с одним членом
-
-
-
После прочтения файла индекса ответа клиенты могут прочитать другие файлы ответов v1, на которые он ссылается.
Ссылка на файл ответа v1
Файл индекса ответа представляет каждую ссылку на другой файл ответа с помощью объекта JSON с членами:
-
kind -
Строка, определяющая один из видов объектов.
-
version -
Объект JSON с членами
majorиminor, определяющими целочисленные компоненты версии вида объекта. -
jsonFile -
Строка JSON, определяющая путь, относительный к файлу индекса ответа, к другому файлу JSON, содержащему объект.
Файлы ответов v1
Файлы ответов, содержащие конкретные виды объектов, записываются CMake. Имена этих файлов не определены и не должны интерпретироваться клиентами. Клиенты должны сначала прочитать файл индекса ответов v1 и следовать ссылкам на имена необходимых объектов ответа.
Файлы ответов (включая файл индекса) никогда не будут заменены файлами с тем же именем, но с другим содержимым. Это позволяет клиенту читать файлы одновременно с работающим CMake, который может сгенерировать новый ответ. Однако после генерации нового ответа CMake попытается удалить файлы ответов из предыдущих запусков, которые он не только что записал. Если клиент попытается прочитать файл ответа, на который ссылается индекс, но не найдет файл, это означает, что конкурирующий CMake сгенерировал новый ответ. Клиент может просто начать заново, прочитав новый файл индекса ответа.
Виды объектов
API CMake на основе файлов сообщает семантическую информацию о системе сборки, используя следующие виды объектов 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": 0 },
"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"
}
},
{
"source": "sub",
"build": "sub",
"parentIndex": 0,
"projectIndex": 0,
"targetIndexes": [ 1 ],
"minimumCMakeVersion": {
"string": "3.14"
}
}
],
"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 -
Массив JSON, каждая запись которого соответствует папке системы сборки, исходная папка которой содержит файл
CMakeLists.txt. Первая запись соответствует корневой папке. Каждая запись — объект JSON, содержащий члены:-
source -
Строка, определяющая путь к папке исходного кода, представленная с помощью слешей. Если папка находится внутри корневой папки исходного кода, путь указывается относительно этой папки (с
.для самой корневой папки исходного кода). В противном случае путь абсолютный. -
build -
Строка, определяющая путь к папке сборки, представленная с помощью слешей. Если папка находится внутри корневой папки сборки, путь указывается относительно этой папки (с
.для самой корневой папки сборки). В противном случае путь абсолютный. -
parentIndex -
Необязательный член, присутствующий, когда папка не корневая. Значение — целое без знака, индекс с нуля другой записи в главном массиве
directories, соответствующий родительской папке, которая добавила эту папку в качестве подпапки. -
childIndexes -
Необязательный член, присутствующий, когда у папки есть подпапки. Значение — массив JSON, содержащий записи, соответствующие подпапкам, созданным командой
add_subdirectory()илиsubdirs(). Каждая запись — целое без знака, индекс с нуля другой записи в главном массивеdirectories. -
projectIndex -
Целое без знака, индекс с нуля в главном массиве
projects, указывающий на проект системы сборки, к которому принадлежит эта папка. -
targetIndexes -
Необязательный член, присутствующий, когда у папки есть собственные целевые файлы, исключая те, которые принадлежат подпапкам. Значение — массив JSON, содержащий записи, соответствующие целевым файлам. Каждая запись — целое без знака, индекс с нуля в главном массиве
targets. -
minimumCMakeVersion -
Необязательный член, присутствующий, когда известна минимальная требуемая версия CMake для папки. Это версия
<min>, заданная в самом последнем вызове командыcmake_minimum_required(VERSION)в папке или одном из её предков. Значение — объект JSON с одним членом:-
string -
Строка, определяющая минимальную требуемую версию в формате:
<major>.<minor>[.<patch>[.<tweak>]][<suffix>]
Каждый компонент — целое без знака, а суффикс может быть произвольной строкой.
-
-
hasInstallRule -
Необязательный член, присутствующий с логическим значением
true, когда папка или одна из её подпапок содержит правилаinstall(), т.е. доступны правилаmake installили аналогичные.
-
-
projects -
Массив JSON, содержащий записи, соответствующие главному проекту и подпроектам, определённым в системе сборки. Каждый (под-)проект соответствует папке исходного кода, в файле
CMakeLists.txtкоторой вызывается командаproject()с именем проекта, отличным от имени родительской папки. Первая запись соответствует главному проекту.Каждая запись — объект JSON, содержащий члены:
-
name -
Строка, определяющая имя, заданное команде
project(). -
parentIndex -
Необязательный член, присутствующий, когда проект не главный. Значение — целое без знака, индекс с нуля другой записи в главном массиве
projectsпроекта-родителя, который добавил этот проект как подпроект. -
childIndexes -
Необязательный член, присутствующий, когда у проекта есть подпроекты. Значение — массив JSON, содержащий записи, соответствующие подпроектам. Каждая запись — целое без знака, индекс с нуля другой записи в главном массиве
projects. -
directoryIndexes -
Массив JSON, содержащий записи, соответствующие папкам системы сборки, которые являются частью проекта. Первая запись соответствует корневой папке проекта. Каждая запись — целое без знака, индекс с нуля в главном массиве
directories. -
targetIndexes -
Необязательный член, присутствующий, когда у проекта есть собственные целевые файлы, исключая те, которые принадлежат подпроектам. Значение — массив JSON, содержащий записи, соответствующие целевым файлам. Каждая запись — целое без знака, индекс с нуля в главном массиве
targets.
-
-
targets -
Массив JSON, содержащий записи, соответствующие целевым файлам системы сборки. Такие целевые файлы создаются вызовами
add_executable(),add_library()иadd_custom_target(), за исключением импортированных целевых файлов и интерфейсных библиотек (которые не генерируют никаких правил сборки). Каждая запись — объект JSON, содержащий члены:-
name -
Строка, определяющая имя целевого файла.
-
id -
Строка, уникально идентифицирующая целевой файл. Она соответствует полю
idв файле, на который ссылаетсяjsonFile. -
directoryIndex -
Целое без знака, индекс с нуля в главном массиве
directories, указывающий на папку системы сборки, в которой определён целевой файл. -
projectIndex -
Целое без знака, индекс с нуля в главном массиве
projects, указывающий на проект системы сборки, в котором определён целевой файл. -
jsonFile -
Строка JSON, определяющая путь относительно файла codemodel к другому файлу JSON, содержащему объект «target» версии 2 codemodel.
-
-
“codemodel” version 2 “target” object
Объект «target» codemodel ссылается на массив targets объекта «codemodel» версии 2. Каждый объект «target» — объект JSON с членами:
-
name -
Строка, определяющая логическое имя целевого объекта.
-
id -
Строка, уникально идентифицирующая целевой объект. Формат не определён и не должен интерпретироваться клиентами.
-
type -
Строка, определяющая тип целевого объекта. Значение должно быть одним из
EXECUTABLE,STATIC_LIBRARY,SHARED_LIBRARY,MODULE_LIBRARY,OBJECT_LIBRARY, илиUTILITY. -
backtrace -
Необязательный член, присутствующий, когда доступен трассировка CMake языка к команде в исходном коде, создавшей целевой объект. Значение — это беззнаковое целое число, индекс с нуля в массиве
backtraceGraphчленаnodes. -
folder -
Необязательный член, присутствующий, когда свойство целевого объекта
FOLDERзадано. Значение — это JSON-объект с одним членом:-
name -
Строка, определяющая имя папки целевого объекта.
-
-
paths -
JSON-объект, содержащий члены:
-
source -
Строка, определяющая путь к каталогу исходных кодов целевого объекта, представленный с использованием слэшей. Если каталог находится внутри каталога исходных кодов верхнего уровня, путь задаётся относительно этого каталога (с использованием
.для самого каталога исходных кодов верхнего уровня). В противном случае путь абсолютный. -
build -
Строка, определяющая путь к каталогу построения целевого объекта, представленный с использованием слэшей. Если каталог находится внутри каталога построения верхнего уровня, путь задаётся относительно этого каталога (с использованием
.для самого каталога построения верхнего уровня). В противном случае путь абсолютный.
-
-
nameOnDisk -
Необязательный член, присутствующий для исполняемых и библиотечных целевых объектов, связанных или архивированных в один основной артефакт. Значение — строка, определяющая имя файла этого артефакта на диске.
-
artifacts -
Необязательный член, присутствующий для исполняемых и библиотечных целевых объектов, которые генерируют артефакты на диске, предназначенные для использования зависимыми объектами. Значение — JSON-массив записей, соответствующих артефактам. Каждая запись — JSON-объект, содержащий один член:
-
path -
Строка, определяющая путь к файлу на диске, представленный с использованием слэшей. Если файл находится внутри каталога построения верхнего уровня, путь задаётся относительно этого каталога. В противном случае путь абсолютный.
-
-
isGeneratorProvided -
Необязательный член, присутствующий со значением булева типа
true, если целевой объект предоставляется генератором системы построения CMake, а не командой в исходном коде. -
install -
Необязательный член, присутствующий, когда целевой объект имеет правило
install(). Значение — JSON-объект с членами:-
prefix -
JSON-объект, определяющий префикс установки. Он содержит один член:
-
path -
Строка, определяющая значение
CMAKE_INSTALL_PREFIX.
-
-
destinations -
JSON-массив записей, определяющих путь назначения установки. Каждая запись — JSON-объект с членами:
-
path -
Строка, определяющая путь назначения установки. Путь может быть абсолютным или относительным к префиксу установки.
-
backtrace -
Необязательный член, присутствующий, когда доступна трассировка CMake языка к вызову команды
install(), указавшей этот путь назначения. Значение — это беззнаковое целое число, индекс с нуля в массивеbacktraceGraphчленаnodes.
-
-
-
link -
Необязательный член, присутствующий для исполняемых и динамических библиотечных целевых объектов, которые связываются с исполняемым файлом времени выполнения. Значение — JSON-объект с членами, описывающими этап связывания:
-
language -
Строка, определяющая язык (например,
C,CXX,Fortran) инструментальной цепочки, используемой для вызова компоновщика. -
commandFragments -
Необязательный член, присутствующий, когда доступны фрагменты вызова командной строки компоновщика. Значение — JSON-массив записей, определяющих упорядоченные фрагменты. Каждая запись — JSON-объект с членами:
-
fragment -
Строка, определяющая фрагмент вызова командной строки компоновщика. Значение закодировано в формате командной строки родной оболочки системы построения.
-
role -
Строка, определяющая роль содержимого фрагмента:
-
flags: флаги компоновки. -
libraries: пути или флаги файлов библиотек компоновки. -
libraryPath: флаги пути поиска библиотек. -
frameworkPath: флаги пути поиска фреймворков macOS.
-
-
-
lto -
Необязательный член, присутствующий со значением булева типа
true, когда включена оптимизация времени компоновки (также известная как межпроцедурная оптимизация или генерация кода времени компоновки). -
sysroot -
Необязательный член, присутствующий, когда определена переменная
CMAKE_SYSROOT_LINKилиCMAKE_SYSROOT. Значение — JSON-объект с одним членом:-
path -
Строка, определяющая абсолютный путь к sysroot, представленный с использованием слэшей.
-
-
-
archive -
Необязательный член, присутствующий для целевых объектов статических библиотек. Значение — JSON-объект с членами, описывающими этап архивирования:
-
commandFragments -
Необязательный член, присутствующий, когда доступны фрагменты вызова командной строки архиватора. Значение — JSON-массив записей, определяющих фрагменты. Каждая запись — JSON-объект с членами:
-
fragment -
Строка, определяющая фрагмент вызова командной строки архиватора. Значение закодировано в формате командной строки родной оболочки системы построения.
-
role -
Строка, определяющая роль содержимого фрагмента:
-
flags: флаги архиватора.
-
-
-
lto -
Необязательный член, присутствующий со значением булева типа
true, когда включена оптимизация времени компоновки (также известная как межпроцедурная оптимизация или генерация кода времени компоновки).
-
-
dependencies -
Необязательный член, присутствующий, когда целевой объект зависит от других целевых объектов. Значение — JSON-массив записей, соответствующих зависимостям. Каждая запись — JSON-объект с членами:
-
id -
Строка, уникально идентифицирующая целевой объект, от которого зависит этот целевой объект. Соответствует основному члену
idдругого целевого объекта. -
backtrace -
Необязательный член, присутствующий, когда доступна трассировка CMake языка к вызову команды
add_dependencies(),target_link_libraries()или другой команде, создавшей эту зависимость. Значение — это беззнаковое целое число, индекс с нуля в массивеbacktraceGraphчленаnodes.
-
-
sources -
JSON-массив записей, соответствующих исходным файлам целевого объекта. Каждая запись — JSON-объект с членами:
-
path -
Строка, определяющая путь к исходному файлу на диске, представленный с использованием слэшей. Если файл находится внутри каталога исходных кодов верхнего уровня, путь задаётся относительно этого каталога. В противном случае путь абсолютный.
-
compileGroupIndex -
Необязательный член, присутствующий, когда исходный код компилируется. Значение — это беззнаковое целое число, индекс с нуля в массиве
compileGroups. -
sourceGroupIndex -
Необязательный член, присутствующий, когда исходный код является частью группы исходных кодов, либо через команду
source_group(), либо по умолчанию. Значение — это беззнаковое целое число, индекс с нуля в массивеsourceGroups. -
isGenerated -
Необязательный член, присутствующий со значением булева типа
true, если исходный код являетсяGENERATED. -
backtrace -
Необязательный член, присутствующий, когда доступна трассировка CMake языка к вызову команды
target_sources(),add_executable(),add_library(),add_custom_target(), или другой команде, добавившей этот исходный код в целевой объект. Значение — это беззнаковое целое число, индекс с нуля в массивеbacktraceGraphчленаnodes.
-
-
sourceGroups
-
Дополнительный член, присутствующий, когда источники сгруппированы командой
source_group()или по умолчанию. Значение — JSON-массив элементов, соответствующих группам. Каждый элемент — JSON-объект с членами:-
name -
Строка, определяющая имя группы источников.
-
sourceIndexes -
JSON-массив, перечисляющий источники, принадлежащие группе. Каждый элемент — целое беззнаковое 0-базовое целое число, индекс в главном
sourcesмассиве целевого объекта.
-
-
compileGroups -
Дополнительный член, присутствующий, когда целевой объект имеет компилируемые источники. Значение — JSON-массив элементов, соответствующих группам источников, которые компилируются с одинаковыми настройками. Каждый элемент — JSON-объект с членами:
-
sourceIndexes -
JSON-массив, перечисляющий источники, принадлежащие группе. Каждый элемент — целое беззнаковое 0-базовое целое число, индекс в главном
sourcesмассиве целевого объекта. -
language -
Строка, определяющая язык (например,
C,CXX,Fortran) используемой цепочки инструментов для компиляции исходного файла. -
compileCommandFragments -
Дополнительный член, присутствующий, когда доступны фрагменты вызова командной строки компилятора. Значение — JSON-массив элементов, указывающих упорядоченные фрагменты. Каждый элемент — JSON-объект с одним членом:
-
fragment -
Строка, определяющая фрагмент вызова командной строки компиляции. Значение закодировано в формате оболочки системной сборки.
-
-
includes -
Дополнительный член, присутствующий, когда имеются каталоги включения. Значение — JSON-массив с элементом для каждого каталога. Каждый элемент — JSON-объект с членами:
-
path -
Строка, определяющая путь к каталогу включения, представленный с помощью слешей.
-
isSystem -
Дополнительный член, присутствующий со значением булевого типа
true, если каталог включения помечен как системный. -
backtrace -
Дополнительный член, присутствующий, когда доступен обратный след CMake языка к вызову
target_include_directories()или другой команде, добавившей этот каталог включения. Значение — целое беззнаковое 0-базовое целое число, индекс в массиве членаbacktraceGraphnodes.
-
-
defines -
Дополнительный член, присутствующий, когда имеются определения препроцессора. Значение — JSON-массив с элементом для каждого определения. Каждый элемент — JSON-объект с членами:
-
define -
Строка, определяющая определение препроцессора в формате
<name>[=<value>], например,DEFилиDEF=1. -
backtrace -
Дополнительный член, присутствующий, когда доступен обратный след CMake языка к вызову
target_compile_definitions()или другой команде, добавившей это определение препроцессора. Значение — целое беззнаковое 0-базовое целое число, индекс в массиве членаbacktraceGraphnodes.
-
-
sysroot -
Дополнительный член, присутствующий, когда переменная
CMAKE_SYSROOT_COMPILEилиCMAKE_SYSROOTопределена. Значение — JSON-объект с одним членом:-
path -
Строка, определяющая абсолютный путь к sysroot, представленный с помощью слешей.
-
-
-
backtraceGraph -
JSON-объект, описывающий граф обратных следов, узлы которых ссылаются на члены
backtraceв других местах. Члены:-
nodes -
JSON-массив, перечисляющий узлы в графе обратного следа. Каждый элемент — JSON-объект с членами:
-
file -
Целое беззнаковое 0-базовое целое число, индекс в массиве обратного следа
files. -
line -
Дополнительный член, присутствующий, когда узел представляет строку в файле. Значение — целое беззнаковое 1-базовое число строки.
-
command -
Дополнительный член, присутствующий, когда узел представляет вызов команды в файле. Значение — целое беззнаковое 0-базовое целое число, индекс в массиве обратного следа
commands. -
parent -
Дополнительный член, присутствующий, когда узел не является нижней частью стека вызовов. Значение — целое беззнаковое 0-базовое целое число, индекс другого элемента в массиве обратного следа
nodes.
-
-
commands -
JSON-массив, перечисляющий имена команд, на которые ссылаются узлы обратного следа. Каждый элемент — строка, определяющая имя команды.
-
files -
JSON-массив, перечисляющий файлы языка CMake, на которые ссылаются узлы обратного следа. Каждый элемент — строка, определяющая путь к файлу, представленный с помощью слешей. Если файл находится в каталоге верхнего уровня исходного кода, путь указывается относительно этого каталога. В противном случае путь является абсолютным.
-
Тип объекта "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": 0 },
"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"
}
]
}
Члены, специфичные для объектов cmakeFiles, следующие:
-
paths -
JSON-объект, содержащий члены:
-
source -
Строка, определяющая абсолютный путь к каталогу верхнего уровня исходного кода, представленный с помощью слешей.
-
build -
Строка, определяющая абсолютный путь к каталогу верхнего уровня сборки, представленный с помощью слешей.
-
-
inputs -
JSON-массив, элементы которого — JSON-объекты, определяющие входной файл, используемый CMake при конфигурировании и генерации системы сборки. Члены каждого элемента:
-
path -
Строка, определяющая путь к входному файлу CMake, представленный с помощью слешей. Если файл находится в каталоге верхнего уровня исходного кода, путь указывается относительно этого каталога. В противном случае путь является абсолютным.
-
isGenerated -
Дополнительный член, присутствующий со значением булевого типа
true, если путь указывает на файл, находящийся в каталоге верхнего уровня сборки, и сборка выполняется вне исходного кода. Этот член недоступен при внутриисходной сборке. -
isExternal -
Дополнительный член, присутствующий со значением булевого типа
true, если путь указывает на файл, не находящийся в каталогах верхнего уровня исходного кода или сборки. -
isCMake -
Дополнительный член, присутствующий со значением булевого типа
true, если путь указывает на файл в установке CMake.
-
© 2000–2020 Kitware, Inc. and Contributors
Licensed under the BSD 3-clause License.
https://cmake.org/cmake/help/v3.15/manual/cmake-file-api.7.html