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": {
"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. Он имеет члены для
cmake,ctest, иcpack, значения которых представляют собой JSON-строки, определяющие абсолютный путь к каждому инструменту, представленный с помощью слешей. Он также имеет членrootдля абсолютного пути к каталогу, содержащему ресурсы CMake, такие как каталогModules/(см.CMAKE_ROOT). -
generator -
Объект JSON, описывающий используемый для сборки генератор CMake. Он имеет члены:
-
multiConfig -
Логическое значение, определяющее, поддерживает ли генератор несколько конфигураций вывода.
-
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": 1 },
"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, содержащему объект “codemodel” версии 2 “target”.
-
-
“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 до команды в исходном коде, которая создала целевой объект. Значение — это целочисленная переменная без знака, индекс с началом с 0 в массиве члена
backtraceGraphnodes. -
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(), которая определила этот пункт назначения. Значение — целочисленная переменная без знака, индекс с началом с 0 в массиве членаbacktraceGraphnodes.
-
-
-
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()или других команд, создавших эту зависимость. Значение — целочисленная переменная без знака, индекс с началом с 0 в массиве членаbacktraceGraphnodes.
-
-
sources -
JSON-массив записей, соответствующих исходным файлам целевого объекта. Каждая запись — JSON-объект с членами:
-
path -
Строка, определяющая путь к исходному файлу на диске, представленный с использованием слешей. Если файл находится в каталоге исходных кодов верхнего уровня, путь указывается относительно этого каталога. В противном случае путь является абсолютным.
-
compileGroupIndex -
Необязательный член, присутствующий, когда исходный код компилируется. Значение — целочисленная переменная без знака, индекс с началом с 0 в массиве
compileGroups. -
sourceGroupIndex -
Необязательный член, присутствующий, когда исходный код является частью группы исходных кодов, либо через команду
source_group(), либо по умолчанию. Значение — целочисленная переменная без знака, индекс с началом с 0 в массивеsourceGroups. -
isGenerated -
Необязательный член, присутствующий с булевым значением
true, если исходный код являетсяGENERATED. -
backtrace -
Необязательный член, присутствующий, когда доступен обратный отслеживающий трассировочный номер языка CMake до вызова команды
target_sources(),add_executable(),add_library(),add_custom_target()или других команд, добавивших этот исходный код в целевой объект. Значение — целочисленная переменная без знака, индекс с началом с 0 в массиве членаbacktraceGraphnodes.
-
-
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-основанное индекс в массивbacktraceGraphчленаnodes.
-
-
precompileHeaders -
Необязательный член, присутствующий, когда
target_precompile_headers()или другие вызовы команды установилиPRECOMPILE_HEADERSдля целевого объекта. Значение — JSON-массив с записью для каждого заголовочного файла. Каждая запись — JSON-объект с членами:-
header -
Полный путь к предварительно скомпилированному заголовочному файлу.
-
backtrace -
Необязательный член, присутствующий, когда доступен стек вызовов CMake до команды
target_precompile_headers()или другого вызова, который добавил этот предварительно скомпилированный заголовок. Значение — целое беззнаковое 0-основанное индекс в массивbacktraceGraphчленаnodes.
Этот член был добавлен в версии codemodel 2.1.
-
-
defines -
Необязательный член, присутствующий, когда имеются определения препроцессора. Значение — JSON-массив с записью для каждого определения. Каждая запись — JSON-объект с членами:
-
define -
Строка, определяющая определение препроцессора в формате
<name>[=<value>], например,DEFилиDEF=1. -
backtrace -
Необязательный член, присутствующий, когда доступен стек вызовов CMake до команды
target_compile_definitions()или другого вызова, который добавил это определение препроцессора. Значение — целое беззнаковое 0-основанное индекс в массивbacktraceGraphчленаnodes.
-
-
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
Объект версии 2 типа “cache” — это 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
Объект версии 1 типа “cmakeFiles” — это 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.18/manual/cmake-file-api.7.html