Spec-Zone.ru › CMake 3.28

cmake-file-api(7)

  • Введение
  • API v1

    • v1 Общие бессостоятельные запросы файлов
    • v1 Бессостоятельные запросы файлов клиента
    • v1 Состоятельные запросы файлов клиента
    • v1 Файл индекса ответов

      • v1 Ссылка на файл ответа
    • v1 Файлы ответов
  • Типы объектов

    • Тип объекта "codemodel"

      • Версия "codemodel" 2
      • Объект "directory" версии "codemodel" 2
      • Объект "target" версии "codemodel" 2
      • Граф "backtrace" версии "codemodel" 2
    • Тип объекта "configureLog"

      • Версия "configureLog" 1
    • Тип объекта "cache"

      • Версия "cache" 2
    • Тип объекта "cmakeFiles"

      • Версия "cmakeFiles" 1
    • Тип объекта "toolchains"

      • Версия "toolchains" 1

Введение

CMake предоставляет API на основе файлов, которое клиенты могут использовать для получения семантической информации о системах сборки, генерируемых CMake. Клиенты могут использовать API, записывая файлы запросов в определённом месте в дереве сборки, чтобы запросить один или несколько типов объектов. При генерации CMake системы сборки в этом дереве она будет читать файлы запросов и писать файлы ответов, которые клиент сможет прочитать.

API на основе файлов использует директорию <build>/.cmake/api/ в верхней части дерева сборки. API имеет версионирование, чтобы поддерживать изменения в расположении файлов внутри директории API. Версионирование файла API ортогонально версионированию типов объектов, используемых в ответах. Эта версия CMake поддерживает только одну версию API, API v1.

Новая в версии 3.27: Проекты также могут отправлять запросы для текущего выполнения с помощью команды cmake_file_api().

API v1

API v1 находится в директории <build>/.cmake/api/v1/. Она имеет следующие поддиректории:

query/

Содержит файлы запросов, написанные клиентами. Они могут быть v1 Общие бессостоятельные запросы файлов, v1 Бессостоятельные запросы файлов клиента или v1 Состоятельные запросы файлов клиента.

reply/

Содержит файлы ответов, которые CMake пишет при каждом запуске для генерации системы сборки. Они индексируются файлом 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 на соответствующий файл ответа для запрошенного типа объекта и выбранной версии.

После прочтения файла индекса ответа клиенты могут прочитать другие файлы ответов 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": 6 },
  "paths": {
    "source": "/path/to/top-level-source-dir",
    "build": "/path/to/top-level-build-dir"
  },
  "configurations": [
    {
      "name": "Debug",
      "directories": [
        {
          "source": ".",
          "build": ".",
          "childIndexes": [ 1 ],
          "projectIndex": 0,
          "targetIndexes": [ 0 ],
          "hasInstallRule": true,
          "minimumCMakeVersion": {
            "string": "3.14"
          },
          "jsonFile": "<file>"
        },
        {
          "source": "sub",
          "build": "sub",
          "parentIndex": 0,
          "projectIndex": 0,
          "targetIndexes": [ 1 ],
          "minimumCMakeVersion": {
            "string": "3.14"
          },
          "jsonFile": "<file>"
        }
      ],
      "projects": [
        {
          "name": "MyProject",
          "directoryIndexes": [ 0, 1 ],
          "targetIndexes": [ 0, 1 ]
        }
      ],
      "targets": [
        {
          "name": "MyExecutable",
          "directoryIndex": 0,
          "projectIndex": 0,
          "jsonFile": "<file>"
        },
        {
          "name": "MyLibrary",
          "directoryIndex": 1,
          "projectIndex": 0,
          "jsonFile": "<file>"
        }
      ]
    }
  ]
}

Члены, специфичные для объектов codemodel:

paths

Объект JSON, содержащий члены:

source

Строка, определяющая абсолютный путь к каталогу исходных файлов верхнего уровня, представленный с помощью слешей.

build

Строка, определяющая абсолютный путь к каталогу сборки верхнего уровня, представленный с помощью слешей.

configurations

Массив JSON записей, соответствующих доступным конфигурациям сборки. В генераторах с одной конфигурацией содержится одна запись для значения переменной CMAKE_BUILD_TYPE. В генераторах с несколькими конфигурациями содержится по одной записи для каждой конфигурации, указанной в переменной CMAKE_CONFIGURATION_TYPES. Каждая запись — объект JSON, содержащий члены:

name

Строка, определяющая имя конфигурации, например Debug.

directories

Массив 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 или эквивалентные им.

jsonFile

Строка JSON, определяющая путь относительно файла codemodel к другому файлу JSON, содержащему объект «codemodel» версии 2 «каталог».

Этот поле был добавлен в версии codemodel 2.3.

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 «целевой объект».

Объект «каталог» версии 2 «codemodel»

Объект «каталог» codemodel ссылается на массив directories объекта "codemodel" версии 2. Каждый объект «каталог» — объект JSON с членами:

paths

Объект JSON, содержащий члены:

source

Строка, определяющая путь к каталогу исходных файлов, представленный с помощью слешей. Если каталог находится внутри каталога исходных файлов верхнего уровня, то путь указывается относительно этого каталога (с . для самого каталога исходных файлов верхнего уровня). В противном случае путь является абсолютным.

build

Строка, определяющая путь к каталогу сборки, представленный с помощью слешей. Если каталог находится внутри каталога сборки верхнего уровня, то путь указывается относительно этого каталога (с . для самого каталога сборки верхнего уровня). В противном случае путь является абсолютным.

installers

Массив JSON записей, соответствующих правилам install(). Каждая запись — объект JSON, содержащий члены:

component

Строка, определяющая компонент, выбранный вызовом соответствующей команды install().

destination

Необязательный член, присутствующий для определённых значений type ниже. Значение — строка, определяющая путь назначения установки. Путь может быть абсолютным или относительным к префиксу установки.

paths

Необязательный член, присутствующий для определённых значений type ниже. Значение — массив JSON, содержащий записи, соответствующие путям (файлам или каталогам) для установки. Каждая запись представляет собой:

  • Строку, определяющую путь, откуда устанавливается файл или каталог. Часть пути, не предваряемая символом /, также определяет путь (имя), куда устанавливается файл или каталог в рамках назначения.
  • Объект JSON с членами:

    from

    Строка, определяющая путь, откуда устанавливается файл или каталог.

    to

    Строка, определяющая путь, куда устанавливается файл или каталог в рамках назначения.

В обоих случаях пути представлены с помощью слешей «/». Если путь «откуда» находится внутри каталога верхнего уровня, документированного соответствующим значением type, то путь задаётся относительно этого каталога. В противном случае путь является абсолютным.

type

Строка, определяющая тип правила установки. Значение — одно из следующих, некоторые варианты предоставляют дополнительные члены:

file

Вызов install(FILES) или install(PROGRAMS). Члены destination и paths заполняются, пути внутри каталога верхнего уровня source выражаются относительно него. Член isOptional может существовать. Этот тип не имеет дополнительных членов.

directory

Вызов install(DIRECTORY). Члены destination и paths заполняются, пути внутри каталога верхнего уровня source выражаются относительно него. Член isOptional может существовать. Этот тип не имеет дополнительных членов.

target

Вызов install(TARGETS). Члены destination и paths заполняются, пути внутри каталога верхнего уровня build выражаются относительно него. Член isOptional может существовать. Этот тип имеет дополнительные члены targetId, targetIndex, targetIsImportLibrary, и targetInstallNamelink.

export

Вызов install(EXPORT). Члены destination и paths заполняются, пути внутри каталога верхнего уровня build выражаются относительно него. Записи paths ссылаются на автоматически сгенерированные CMake файлы для установки, и их фактические значения рассматриваются как частные детали реализации. Этот тип имеет дополнительные члены exportName и exportTargets.

script

Вызов install(SCRIPT). Этот тип имеет дополнительный член scriptFile.

code

Вызов install(CODE). Этот тип не имеет дополнительных членов.

importedRuntimeArtifacts

Вызов install(IMPORTED_RUNTIME_ARTIFACTS). Заполняется член destination. Член isOptional может существовать. Этот тип не имеет дополнительных членов.

runtimeDependencySet

Вызов install(RUNTIME_DEPENDENCY_SET) или вызов install(TARGETS) с RUNTIME_DEPENDENCIES. Заполняется член destination. Этот тип имеет дополнительные члены runtimeDependencySetName и runtimeDependencySetType.

fileSet

Вызов install(TARGETS) с FILE_SET. Члены destination и paths заполняются. Член isOptional может существовать. Этот тип имеет дополнительные члены fileSetName, fileSetType, fileSetDirectories, и fileSetTarget.

Этот тип был добавлен в версии codemodel 2.4.

isExcludeFromAll

Необязательный член, присутствующий с булевым значением true при вызове install() с опцией EXCLUDE_FROM_ALL.

isForAllComponents

Необязательный член, присутствующий с булевым значением true при вызове install(SCRIPT|CODE) с опцией ALL_COMPONENTS.

isOptional

Необязательный член, присутствующий с булевым значением true при вызове install() с опцией OPTIONAL. Это разрешено, когда type равно file, directory, или target.

targetId

Необязательный член, присутствующий, когда type равно target Значение — строка, уникально идентифицирующая целевой объект для установки. Соответствует члену id целевого объекта в массиве targets основного объекта "codemodel".

targetIndex

Необязательный член, присутствующий, когда type равно target Значение — целое беззнаковое число, 0-основанный индекс в массиве targets основного объекта "codemodel" для целевого объекта для установки.

targetIsImportLibrary

Необязательный член, присутствующий, когда type равно target, и установщик предназначен для файла библиотеки импорта DLL Windows или файла импорта линковщика AIX. При наличии он имеет булево значение true.

targetInstallNamelink

Необязательный член, присутствующий, когда type равно target, и установщик соответствует целевому объекту, который может использовать символические ссылки для реализации свойств целевого объекта VERSION и SOVERSION. Значение — строка, указывающая, как установщик должен обрабатывать символические ссылки: skip означает, что установщик должен пропустить символические ссылки и установить только реальный файл, а only означает, что установщик должен установить только символические ссылки, а не реальный файл. Во всех случаях член paths перечисляет то, что он фактически устанавливает.

exportName

Необязательный член, присутствующий, когда type равно export Значение — строка, определяющая имя экспорта.

exportTargets

Необязательный член, присутствующий, когда type равно export Значение — массив JSON, содержащий записи, соответствующие целевым объектам, включённым в экспорт. Каждая запись — объект JSON с членами:

id

Строка, уникально идентифицирующая целевой объект. Соответствует члену id целевого объекта в массиве targets основного объекта "codemodel".

index

Целое беззнаковое число, 0-основанный индекс в массиве targets основного объекта "codemodel" для целевого объекта.

runtimeDependencySetName

Необязательный член, присутствующий, когда type равно runtimeDependencySet и установщик был создан вызовом install(RUNTIME_DEPENDENCY_SET). Значение — строка, определяющая имя набора зависимостей времени выполнения, которое было установлено.

runtimeDependencySetType

Необязательный член, присутствующий, когда type равно runtimeDependencySet Значение — строка с одним из следующих значений:

library

Указывает, что этот установщик устанавливает зависимости, которые не являются macOS-фреймворками.

framework

Указывает, что этот установщик устанавливает зависимости, которые являются macOS-фреймворками.

fileSetName

Необязательный член, присутствующий, когда type равно fileSet Значение — строка с именем набора файлов.

Это поле было добавлено в версии codemodel 2.4.

fileSetType

Необязательный член, присутствующий, когда type равно fileSet Значение — строка с типом набора файлов.

Это поле было добавлено в версии codemodel 2.4.

fileSetDirectories

Дополнительный член, присутствующий, когда type равно fileSet. Значение представляет собой список строк с базовыми каталогами набора файлов (определяемые genex-оценкой HEADER_DIRS или HEADER_DIRS_<NAME>).

Это поле было добавлено в версии codemodel 2.4.

fileSetTarget

Дополнительный член, присутствующий, когда type равно fileSet. Значение представляет собой JSON-объект с членами:

id

Строка, уникально идентифицирующая целевой объект. Она соответствует члену id целевого объекта в массиве targets основного объекта "codemodel".

index

Беззнаковое целое число, 0-основанный индекс в массиве targets основного объекта "codemodel" для целевого объекта.

Это поле было добавлено в версии codemodel 2.4.

scriptFile

Дополнительный член, присутствующий, когда type равно script. Значение представляет собой строку, определяющую путь к файлу скрипта на диске, представленный с помощью слешей. Если файл находится внутри каталога исходных файлов верхнего уровня, путь указывается относительно этого каталога. В противном случае путь является абсолютным.

backtrace

Дополнительный член, присутствующий, когда доступен стек отслеживания CMake-языка до install() или другого вызова команды, добавившего этот установщик. Значение представляет собой беззнаковое целое число, 0-основанный индекс в массиве backtraceGraph члена nodes.

backtraceGraph

Граф отслеживания "codemodel" версии 2, узлы которого ссылаются на члены backtrace в других местах этого объекта "каталог".

Объект "codemodel" версии 2 "target"

Объект "codemodel" "target" ссылается на массив targets объекта "codemodel" версии 2. Каждый объект "target" представляет собой JSON-объект с членами:

name

Строка, определяющая логическое имя целевого объекта.

id

Строка, уникально идентифицирующая целевой объект. Формат не определен и не должен интерпретироваться клиентами.

type

Строка, определяющая тип целевого объекта. Значение должно быть одним из EXECUTABLE, STATIC_LIBRARY, SHARED_LIBRARY, MODULE_LIBRARY, OBJECT_LIBRARY, INTERFACE_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.

fileSets

JSON-массив записей, соответствующих наборам файлов целевого объекта. Каждая запись — JSON-объект с членами:

name

Строка, определяющая имя набора файлов.

type

Строка, определяющая тип набора файлов. См. target_sources() поддерживаемые типы наборов файлов.

visibility

Строка, определяющая видимость набора файлов; одно из PUBLIC, PRIVATE, или INTERFACE.

baseDirectories

JSON-массив строк, каждая из которых определяет базовый каталог, содержащий исходные файлы в наборе файлов. Если каталог находится внутри каталога исходных кодов верхнего уровня, то путь указывается относительно этого каталога. В противном случае путь является абсолютным.

Этот член был добавлен в версии codemodel 2.5.

sources

Массив JSON-записей, соответствующих исходным файлам целевого объекта. Каждая запись — JSON-объект с полями:

path

Строка, определяющая путь к исходному файлу на диске, представленный с использованием слешей. Если файл находится внутри каталога исходных файлов верхнего уровня, путь указывается относительно этого каталога. В противном случае путь является абсолютным.

compileGroupIndex

Необязательное поле, присутствующее при компиляции исходного кода. Значение — целое без знака, 0-основанный индекс в массиве compileGroups.

sourceGroupIndex

Необязательное поле, присутствующее, когда исходный код входит в группу исходных файлов с помощью команды source_group() или по умолчанию. Значение — целое без знака, 0-основанный индекс в массиве sourceGroups.

isGenerated

Необязательное поле, присутствующее со значением булевого типа true, если исходный код — GENERATED.

fileSetIndex

Необязательное поле, присутствующее, когда исходный код входит в набор файлов. Значение — целое без знака, 0-основанный индекс в массиве fileSets.

Это поле было добавлено в версии codemodel 2.5.

backtrace

Необязательное поле, присутствующее, когда доступен обратный отслеживаемый путь CMake для вызова команды target_sources(), add_executable(), add_library(), add_custom_target() или другой, добавившей этот исходный код в целевой объект. Значение — целое без знака, 0-основанный индекс в массиве backtraceGraph поля nodes.

sourceGroups

Необязательное поле, присутствующее, когда исходные файлы сгруппированы командой source_group() или по умолчанию. Значение — массив JSON-записей, соответствующих группам. Каждая запись — JSON-объект с полями:

name

Строка, определяющая имя группы исходных файлов.

sourceIndexes

Массив JSON, содержащий список исходных файлов, принадлежащих к группе. Каждая запись — целое без знака, 0-основанный индекс в главном массиве sources для целевого объекта.

compileGroups

Необязательное поле, присутствующее, когда целевой объект имеет компилируемые исходные файлы. Значение — массив JSON-записей, соответствующих группам исходных файлов, которые компилируются с одинаковыми настройками. Каждая запись — JSON-объект с полями:

sourceIndexes

Массив JSON, содержащий список исходных файлов, принадлежащих к группе. Каждая запись — целое без знака, 0-основанный индекс в главном массиве sources для целевого объекта.

language

Строка, определяющая язык (например, C, CXX, Fortran) используемой цепочки инструментов для компиляции исходного файла.

languageStandard

Необязательное поле, присутствующее, когда язык стандарта задан явно (например, через CXX_STANDARD) или неявно функциями компиляции. Каждая запись — JSON-объект с двумя полями:

backtraces

Необязательное поле, присутствующее, когда доступен обратный отслеживаемый путь CMake для настройки <LANG>_STANDARD. Если стандарт языка был задан неявно функциями компиляции, они используются в качестве обратных отслеживаемых путей. Возможно, что несколько функций компиляции требуют одного и того же стандарта языка, поэтому может быть несколько обратных отслеживаемых путей. Значение — JSON-массив, где каждая запись — целое без знака, 0-основанный индекс в массиве backtraceGraph поля nodes.

standard

Строка, представляющая стандарт языка.

Это поле было добавлено в версии codemodel 2.2.

compileCommandFragments

Необязательное поле, присутствующее, когда доступны фрагменты вызова команды компилятора. Значение — JSON-массив, содержащий упорядоченные фрагменты. Каждая запись — JSON-объект с одним полем:

fragment

Строка, определяющая фрагмент вызова команды компиляции. Значение закодировано в формате оболочки системной сборки.

includes

Необязательное поле, присутствующее, когда есть каталоги включения. Значение — JSON-массив со строкой для каждого каталога. Каждая запись — JSON-объект с полями:

path

Строка, определяющая путь к каталогу включения, представленный с использованием слешей.

isSystem

Необязательное поле, присутствующее со значением булевого типа true, если каталог включения помечен как системный каталог включения.

backtrace

Необязательное поле, присутствующее, когда доступен обратный отслеживаемый путь CMake для команды target_include_directories() или другого вызова команды, добавившего этот каталог включения. Значение — целое без знака, 0-основанный индекс в массиве backtraceGraph поля nodes.

frameworks

Необязательное поле, присутствующее на платформах Apple, если есть фреймворки. Значение — JSON-массив со строкой для каждого каталога. Каждая запись — JSON-объект с полями:

path

Строка, определяющая путь к каталогу фреймворка, представленный с использованием слешей.

isSystem

Необязательное поле, присутствующее со значением булевого типа true, если фреймворк помечен как системный.

backtrace

Необязательное поле, присутствующее, когда доступен обратный отслеживаемый путь CMake для команды target_link_libraries() или другого вызова команды, добавившего этот фреймворк. Значение — целое без знака, 0-основанный индекс в массиве backtraceGraph поля nodes.

Это поле было добавлено в версии codemodel 2.6.

precompileHeaders

Необязательное поле, присутствующее, когда команда target_precompile_headers() или другие команды устанавливают PRECOMPILE_HEADERS для целевого объекта. Значение — JSON-массив со строкой для каждого заголовка. Каждая запись — JSON-объект с полями:

header

Полный путь к файлу предварительно скомпилированного заголовка.

backtrace

Необязательное поле, присутствующее, когда доступен обратный отслеживаемый путь 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

"codemodel" версия 2 "график обратного отслеживания", узлы которого ссылаются на члены backtrace в других местах этого объекта "target".

"codemodel" версия 2 "график обратного отслеживания"

Член backtraceGraph объекта "codemodel" версии 2 "directory" или "codemodel" версии 2 "target" — это JSON-объект, описывающий граф отслеживания вызовов функций. Его узлы ссылаются на члены backtrace в другом месте содержащего объекта. Члены объекта графа отслеживания вызовов функций:

nodes

JSON-массив, перечисляющий узлы в графе отслеживания вызовов функций. Каждый элемент — JSON-объект с членами:

file

Беззнаковое целое число, 0-базируемый индекс в массиве files отслеживания вызовов функций.

line

Необязательный член, присутствующий, когда узел представляет строку в файле. Значение — беззнаковое целое число, 1-базируемый номер строки.

command

Необязательный член, присутствующий, когда узел представляет вызов команды внутри файла. Значение — беззнаковое целое число, 0-базируемый индекс в массиве commands отслеживания вызовов функций.

parent

Необязательный член, присутствующий, когда узел не является нижним элементом стека вызовов. Значение — беззнаковое целое число, 0-базируемый индекс другого элемента в массиве nodes отслеживания вызовов функций.

commands

JSON-массив, перечисляющий имена команд, на которые ссылаются узлы отслеживания вызовов функций. Каждый элемент — строка, задающая имя команды.

files

JSON-массив, перечисляющий файлы CMake языка, на которые ссылаются узлы отслеживания вызовов функций. Каждый элемент — строка, задающая путь к файлу, представленный с помощью слешей. Если файл находится внутри корневого каталога исходных файлов, путь указывается относительно этого каталога. В противном случае путь является абсолютным.

Тип объекта "configureLog"

Тип объекта configureLog описывает расположение и содержимое файла cmake-configure-log(7).

Существует только одна главная версия объекта configureLog, версия 1.

"configureLog" версия 1

Объект версии 1 типа configureLog — это JSON-объект:

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

Члены, специфичные для объектов configureLog, это:

path

Строка, указывающая путь к файлу журнала конфигурации. Клиенты должны читать файл журнала по этому пути, который может отличаться от пути, описанного в cmake-configure-log(7). Файл журнала может отсутствовать, если события не регистрировались.

eventKindNames

JSON-массив, элементы которого представляют собой JSON-строки, которые называют один из типов событий cmake-configure-log(7) с версиями. В списке будет указана не более одной версии каждого типа событий журнала конфигурации. Хотя журнал конфигурации может содержать другие типы событий (с версиями), клиенты должны игнорировать те, которые не перечислены в этом поле.

Тип объекта "cache"

Тип объекта cache перечисляет записи кэша. Это Переменные, сохраненные в постоянном кэше (CMakeCache.txt) для дерева сборки.

Существует только одна главная версия объекта cache, версия 2. Версия 1 не существует, чтобы избежать путаницы с версией из режима cmake-server(7).

"cache" версия 2

Объект версии 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.

Тип объекта "toolchains"

Тип объекта toolchains перечисляет свойства используемых при сборке инструментальных цепочек. Сюда входят язык, путь к компилятору, идентификатор и версия.

Существует только одна главная версия объекта toolchains, версия 1.

"toolchains" версия 1

Объект версии 1 типа toolchains — это JSON-объект:

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

Члены, специфичные для объектов toolchains, это:

toolchains

Массив JSON, элементы которого — объекты JSON, задающие цепочку инструментов, связанную с конкретным языком. Члены каждого элемента:

language

Строка JSON, задающая язык цепочки инструментов, например, C или CXX. Имена языков совпадают с именами языков, которые можно передать команде project(). Поскольку CMake поддерживает только одну цепочку инструментов на язык, это поле может использоваться в качестве ключа.

compiler

Объект JSON, содержащий члены:

path

Необязательный член, присутствующий, когда переменная CMAKE_<LANG>_COMPILER определена для текущего языка. Его значение — строка JSON, содержащая путь к компилятору.

id

Необязательный член, присутствующий, когда переменная CMAKE_<LANG>_COMPILER_ID определена для текущего языка. Его значение — строка JSON, содержащая идентификатор (GNU, MSVC и т. д.) компилятора.

version

Необязательный член, присутствующий, когда переменная CMAKE_<LANG>_COMPILER_VERSION определена для текущего языка. Его значение — строка JSON, содержащая версию компилятора.

target

Необязательный член, присутствующий, когда переменная CMAKE_<LANG>_COMPILER_TARGET определена для текущего языка. Его значение — строка JSON, содержащая целевой объект кросс-компиляции компилятора.

implicit

Объект JSON, содержащий члены:

includeDirectories

Необязательный член, присутствующий, когда переменная CMAKE_<LANG>_IMPLICIT_INCLUDE_DIRECTORIES определена для текущего языка. Его значение — массив JSON из строк JSON, где каждая строка содержит путь к неявной директории включения для компилятора.

linkDirectories

Необязательный член, присутствующий, когда переменная CMAKE_<LANG>_IMPLICIT_LINK_DIRECTORIES определена для текущего языка. Его значение — массив JSON из строк JSON, где каждая строка содержит путь к неявной директории связывания для компилятора.

linkFrameworkDirectories

Необязательный член, присутствующий, когда переменная CMAKE_<LANG>_IMPLICIT_LINK_FRAMEWORK_DIRECTORIES определена для текущего языка. Его значение — массив JSON из строк JSON, где каждая строка содержит путь к неявной директории связывания фреймворков для компилятора.

linkLibraries

Необязательный член, присутствующий, когда переменная CMAKE_<LANG>_IMPLICIT_LINK_LIBRARIES определена для текущего языка. Его значение — массив JSON из строк JSON, где каждая строка содержит путь к неявной библиотеке связывания для компилятора.

sourceFileExtensions

Необязательный член, присутствующий, когда переменная CMAKE_<LANG>_SOURCE_FILE_EXTENSIONS определена для текущего языка. Его значение — массив JSON из строк JSON, где каждая строка содержит расширение файла (без ведущей точки) для языка.

© 2000–2024 Kitware, Inc. and Contributors
Licensed under the BSD 3-clause License.
https://cmake.org/cmake/help/v3.28/manual/cmake-file-api.7.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API