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
Объект версии 2 типа codemodel — это объект 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-файлу, содержащему объект «целевой» из «codemodel» версии 2.
-
-
“codemodel” версии 2 «целевой» объект
Объект «целевой» из «codemodel» версии 2 ссылается на массив targets объекта «codemodel» версии 2. Каждый объект «целевой» — 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-массив, перечисляющий источники, принадлежащие группе. Каждая запись — целое неотрицательное число, индекс с нуля в основном массиве
sourcesдля целевого объекта.
-
-
compileGroups -
Дополнительный член, присутствующий, когда у целевого объекта есть компилируемые источники. Значение — JSON-массив записей, соответствующих группам источников, которые все компилируются с одинаковыми настройками. Каждая запись — JSON-объект с членами:
-
sourceIndexes -
JSON-массив, перечисляющий источники, принадлежащие группе. Каждая запись — целое неотрицательное число, индекс с нуля в основном массиве
sourcesдля целевого объекта. -
language -
Строка, определяющая язык (например,
C,CXX,Fortran), используемый компилятором для компиляции исходного файла. -
compileCommandFragments -
Дополнительный член, присутствующий, когда доступны фрагменты вызова командной строки компилятора. Значение — JSON-массив записей, определяющих упорядоченные фрагменты. Каждая запись — JSON-объект с одним членом:
-
fragment -
Строка, определяющая фрагмент вызова командной строки компиляции. Значение закодировано в формате оболочки системной сборки.
-
-
includes -
Дополнительный член, присутствующий, когда есть каталоги включения. Значение — JSON-массив с записью для каждого каталога. Каждая запись — JSON-объект с членами:
-
path -
Строка, определяющая путь к каталогу включения, представленный с помощью слешей.
-
isSystem -
Дополнительный член, присутствующий со значением булевого типа
true, если каталог включения помечен как системный каталог включения. -
backtrace -
Дополнительный член, присутствующий, когда доступен обратный отслеживающий стек CMake до команды
target_include_directories()или другого вызова команды, который добавил этот каталог включения. Значение — целое неотрицательное число, индекс с нуля в массивеbacktraceGraphчленаnodes.
-
-
defines -
Дополнительный член, присутствующий, когда есть определения препроцессора. Значение — JSON-массив с записью для каждого определения. Каждая запись — JSON-объект с членами:
-
define -
Строка, определяющая определение препроцессора в формате
<name>[=<value>], например,DEFилиDEF=1. -
backtrace -
Дополнительный член, присутствующий, когда доступен обратный отслеживающий стек CMake до команды
target_compile_definitions()или другого вызова команды, который добавил это определение препроцессора. Значение — целое неотрицательное число, индекс с нуля в массивеbacktraceGraphчленаnodes.
-
-
sysroot -
Дополнительный член, присутствующий, когда определена переменная
CMAKE_SYSROOT_COMPILEилиCMAKE_SYSROOT. Значение — JSON-объект с одним членом:-
path -
Строка, определяющая абсолютный путь к sysroot, представленный с помощью слешей.
-
-
-
backtraceGraph -
JSON-объект, описывающий граф обратных отслеживаний, узлы которого ссылаются на члены
backtraceв других местах. Члены:-
nodes -
JSON-массив, перечисляющий узлы в графе обратного отслеживания. Каждая запись — JSON-объект с членами:
-
file -
Целое неотрицательное число, индекс с нуля в массиве обратного отслеживания
files. -
line -
Дополнительный член, присутствующий, когда узел представляет строку в файле. Значение — целое положительное число, номер строки.
-
command -
Дополнительный член, присутствующий, когда узел представляет вызов команды в файле. Значение — целое неотрицательное число, индекс с нуля в массиве обратного отслеживания
commands. -
parent -
Дополнительный член, присутствующий, когда узел не является нижним элементом стека вызовов. Значение — целое неотрицательное число, индекс с нуля другого элемента в массиве обратного отслеживания
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.14/manual/cmake-file-api.7.html