Spec-Zone.ru › CMake 3.21

cmake-presets(7)

  • Введение
  • Формат

    • Настройка предустановки
    • Предустановка сборки
    • Предустановка тестирования
    • Условие
    • Развертывание макросов
  • Схема

Введение

Пользователи CMake часто сталкиваются с проблемой совместного использования настроек проекта для стандартных способов конфигурирования. Это может быть сделано для поддержки CI-сборок или для пользователей, которые часто используют одну и ту же сборку. CMake поддерживает два файла, CMakePresets.json и CMakeUserPresets.json, которые позволяют пользователям указывать общие параметры конфигурации и делиться ими с другими.

CMakePresets.json и CMakeUserPresets.json находятся в корневой директории проекта. У них одинаковый формат, и оба являются необязательными (хотя по крайней мере один должен быть присутствующим, если указан --preset). CMakePresets.json предназначен для сохранения проектных сборок, а CMakeUserPresets.json — для сохранения локальных сборок разработчиками. CMakePresets.json можно включать в систему управления версиями, а CMakeUserPresets.json не следует включать. Например, если проект использует Git, CMakePresets.json можно отслеживать, а CMakeUserPresets.json следует добавить в .gitignore.

Формат

Файлы представляют собой JSON-документ с объектом в качестве корня:

{
  "version": 3,
  "cmakeMinimumRequired": {
    "major": 3,
    "minor": 20,
    "patch": 0
  },
  "configurePresets": [
    {
      "name": "default",
      "displayName": "Default Config",
      "description": "Default build using Ninja generator",
      "generator": "Ninja",
      "binaryDir": "${sourceDir}/build/default",
      "cacheVariables": {
        "FIRST_CACHE_VARIABLE": {
          "type": "BOOL",
          "value": "OFF"
        },
        "SECOND_CACHE_VARIABLE": "ON"
      },
      "environment": {
        "MY_ENVIRONMENT_VARIABLE": "Test",
        "PATH": "$env{HOME}/ninja/bin:$penv{PATH}"
      },
      "vendor": {
        "example.com/ExampleIDE/1.0": {
          "autoFormat": true
        }
      }
    },
    {
      "name": "ninja-multi",
      "inherits": "default",
      "displayName": "Ninja Multi-Config",
      "description": "Default build using Ninja Multi-Config generator",
      "generator": "Ninja Multi-Config"
    },
    {
      "name": "windows-only",
      "inherits": "default",
      "displayName": "Windows-only configuration",
      "description": "This build is only available on Windows",
      "condition": {
        "type": "equals",
        "lhs": "${hostSystemName}",
        "rhs": "Windows"
      }
    }
  ],
  "buildPresets": [
    {
      "name": "default",
      "configurePreset": "default"
    }
  ],
  "testPresets": [
    {
      "name": "default",
      "configurePreset": "default",
      "output": {"outputOnFailure": true},
      "execution": {"noTestsAction": "error", "stopOnFailure": true}
    }
  ],
  "vendor": {
    "example.com/ExampleIDE/1.0": {
      "autoFormat": false
    }
  }
}

Корневой объект распознаёт следующие поля:

version

Обязательное целое число, представляющее версию JSON-схемы. Поддерживаемые версии — 1, 2, и 3.

cmakeMinimumRequired

Необязательный объект, представляющий минимальную версию CMake, необходимую для сборки проекта. Этот объект состоит из следующих полей:

major

Необязательное целое число, представляющее главную версию.

minor

Необязательное целое число, представляющее второстепенную версию.

patch

Необязательное целое число, представляющее номер исправлений.

vendor

Необязательный словарь, содержащий информацию, специфичную для поставщика. CMake не интерпретирует содержимое этого поля, кроме как для проверки того, что это словарь, если он существует. Однако ключи должны быть доменным именем, специфичным для поставщика, за которым следует разделитель / и путь. Например, Example IDE 1.0 может использовать example.com/ExampleIDE/1.0. Значение каждого поля может быть любым, желаемым поставщиком, хотя обычно это будет словарь.

configurePresets

Необязательный массив объектов Настройка предустановки. Это разрешено в файлах предустановок, использующих версию 1 или выше.

buildPresets

Необязательный массив объектов Предустановки сборки. Это разрешено в файлах предустановок, использующих версию 2 или выше.

testPresets

Необязательный массив объектов Предустановка тестирования. Это разрешено в файлах предустановок, использующих версию 2 или выше.

Настройка предустановки

Каждый элемент массива configurePresets — это JSON-объект, который может содержать следующие поля:

name

Обязательная строка, представляющая удобное для машины имя предустановки. Этот идентификатор используется в параметре cmake --preset. Не должно быть двух предустановок настроек в объединении CMakePresets.json и CMakeUserPresets.json в одной директории с одинаковым именем. Однако предустановка настроек может иметь то же имя, что и предустановка сборки или тестирования.

hidden

Необязательный булево, указывающий, должен ли быть скрыт набор предустановок. Если набор предустановок скрыт, он не может быть использован в аргументе --preset=, не будет отображаться в CMake GUI, и не должен иметь действительного значения generator или binaryDir, даже при наследовании. hidden предустановки предназначены для использования в качестве основы для других предустановок, от которых они могут унаследовать через поле inherits.

inherits

Необязательный массив строк, представляющий имена предустановок для наследования. Предустановка будет наследовать все поля от предустановок inherits по умолчанию (кроме name, hidden, inherits, description, и displayName ), но может переопределять их по желанию. Если несколько предустановок inherits предоставляют конфликтующие значения для одного и того же поля, будет предпочтительнее предыдущая предустановка в списке inherits. Предустановки в CMakePresets.json не могут наследовать от предустановок в CMakeUserPresets.json.

Это поле также может быть строкой, что эквивалентно массиву, содержащему одну строку.

condition

Необязательный объект Условие. Это разрешено в файлах предустановок, использующих версию 3 или выше.

vendor

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

displayName

Необязательная строка с понятным для человека именем предустановки.

description

Необязательная строка с понятным для человека описанием предустановки.

generator

Необязательная строка, представляющая генератор для использования в предустановке. Если generator не указан, он должен быть унаследован от предустановки inherits (если эта предустановка не hidden). В версии 3 или выше это поле может быть опущено для использования обычной процедуры обнаружения генератора.

Обратите внимание, что для генераторов Visual Studio, в отличие от аргумента командной строки -G, вы не можете включать имя платформы в имя генератора. Используйте поле architecture вместо этого.

architecture, toolset

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

value

Необязательная строка, представляющая значение.

strategy

Необязательная строка, указывающая CMake, как обрабатывать поле architecture или toolset . Допустимые значения:

"set"

Установить соответствующее значение. Это приведет к ошибке для генераторов, которые не поддерживают соответствующее поле.

"external"

Не устанавливать значение, даже если генератор его поддерживает. Это полезно, например, если предустановка использует генератор Ninja, а среда разработки знает, как настроить среду Visual C++ из полей architecture и toolset. В этом случае CMake проигнорирует поле, но среда разработки может использовать их для настройки среды перед вызовом CMake.

toolchainFile

Необязательная строка, представляющая путь к файлу цепочки инструментов. Это поле поддерживает развертывание макросов. Если указан относительный путь, он вычисляется относительно каталога сборки, и если не найден, относительно каталога исходных кодов. Имеет приоритет над любым значением CMAKE_TOOLCHAIN_FILE. Это разрешено в файлах предустановок, использующих версию 3 или выше.

binaryDir

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

installDir

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

cmakeExecutable

Необязательная строка, представляющая путь к исполняемому файлу CMake для использования в этой предустановке. Это зарезервировано для использования средами разработки и не используется самим CMake. Среды разработки, использующие это поле, должны развернуть все макросы в нём.

cacheVariables

Необязательный словарь переменных кэша. Ключ — имя переменной (которое не может быть пустым), а значение — либо null, булево значение (что эквивалентно значению "TRUE" или "FALSE" и типу BOOL), строка, представляющая значение переменной (которая поддерживает развертывание макросов), или объект со следующими полями:

type

Необязательная строка, представляющая тип переменной.

value

Обязательная строка или булево значение, представляющее значение переменной. Булево значение эквивалентно "TRUE" или "FALSE". Это поле поддерживает развертывание макросов.

Переменные кэша наследуются через поле inherits, и переменные предустановки будут объединением собственных переменных cacheVariables и переменных cacheVariables от всех родителей. Если несколько предустановок в этом объединении определяют одну и ту же переменную, применяются стандартные правила inherits. Установка переменной в null приводит к тому, что она не будет установлена, даже если значение было унаследовано от другой предустановки.

environment

Дополнительный словарь переменных среды. Ключ — имя переменной (которое не может быть пустой строкой), а значение — либо null, либо строка, представляющая значение переменной. Каждая переменная устанавливается независимо от того, было ли ей присвоено значение в окружении процесса. Это поле поддерживает расширение макросов, и переменные среды в этом словаре могут ссылаться друг на друга, а также перечисляться в любом порядке, при условии, что такие ссылки не образуют цикл (например, если ENV_1 равно $env{ENV_2}, ENV_2 не может быть $env{ENV_1}.)

Переменные среды наследуются через поле inherits, и окружение пресета будет объединением собственного environment и environment всех его родительских пресетов. Если несколько пресетов в этом объединении определяют одну и ту же переменную, применяются стандартные правила inherits. Установка переменной в null приводит к тому, что она не устанавливается, даже если значение было унаследовано от другого пресета.

warnings

Необязательный объект, определяющий включенные предупреждения. Объект может содержать следующие поля:

dev

Необязательный булевый тип. Эквивалентно передаче -Wdev или -Wno-dev в командной строке. Это значение не может быть установлено в false, если errors.dev установлено в true.

deprecated

Необязательный булевый тип. Эквивалентно передаче -Wdeprecated или -Wno-deprecated в командной строке. Это значение не может быть установлено в false, если errors.deprecated установлено в true.

uninitialized

Необязательный булевый тип. Установка этого значения в true эквивалентна передаче --warn-uninitialized в командной строке.

unusedCli

Необязательный булевый тип. Установка этого значения в false эквивалентна передаче --no-warn-unused-cli в командной строке.

systemVars

Необязательный булевый тип. Установка этого значения в true эквивалентна передаче --check-system-vars в командной строке.

errors

Необязательный объект, определяющий включенные ошибки. Объект может содержать следующие поля:

dev

Необязательный булевый тип. Эквивалентно передаче -Werror=dev или -Wno-error=dev в командной строке. Это значение не может быть установлено в true, если warnings.dev установлено в false.

deprecated

Необязательный булевый тип. Эквивалентно передаче -Werror=deprecated или -Wno-error=deprecated в командной строке. Это значение не может быть установлено в true, если warnings.deprecated установлено в false.

debug

Необязательный объект, определяющий параметры отладки. Объект может содержать следующие поля:

output

Необязательный булевый тип. Установка этого значения в true эквивалентна передаче --debug-output в командной строке.

tryCompile

Необязательный булевый тип. Установка этого значения в true эквивалентна передаче --debug-trycompile в командной строке.

find

Необязательный булевый тип. Установка этого значения в true эквивалентна передаче --debug-find в командной строке.

Пресет сборки

Каждый элемент массива buildPresets — это JSON-объект, который может содержать следующие поля:

name

Обязательная строка, представляющая имя пресета, удобное для машины. Этот идентификатор используется в опции cmake --build --preset. В объединении CMakePresets.json и CMakeUserPresets.json не должно быть двух пресетов сборки в одной директории с одинаковым именем. Однако пресет сборки может иметь то же имя, что и пресет конфигурации или тестирования.

hidden

Необязательный булевый тип, определяющий, должен ли пресет быть скрытым. Если пресет скрыт, его нельзя использовать в аргументе --preset, и он не должен иметь действительного configurePreset, даже при наследовании. Скрытые пресеты предназначены для использования в качестве основы для других пресетов, которые наследуют их через поле inherits.

inherits

Необязательный массив строк, представляющий имена пресетов, от которых следует унаследовать. По умолчанию пресет наследует все поля от пресетов inherits, но может их переопределять по желанию (за исключением name, hidden, inherits, description, и displayName). Если несколько пресетов inherits предоставляют конфликтующие значения для одного и того же поля, предпочтение отдаётся более раннему пресету в списке inherits. Пресеты в CMakePresets.json не могут наследовать от пресетов в CMakeUserPresets.json.

Это поле также может быть строкой, что эквивалентно массиву, содержащему одну строку.

condition

Необязательный объект Condition. Разрешено в файлах пресетов, указывающих версию 3 или выше.

vendor

Необязательный словарь, содержащий информацию, специфичную для поставщика. CMake не интерпретирует содержимое этого поля, кроме как для проверки, что это словарь, если он существует. Тем не менее, он должен следовать тем же соглашениям, что и корневое поле vendor. Если поставщики используют собственное поле vendor для каждого пресета, они должны реализовать наследование разумным образом, когда это уместно.

displayName

Необязательная строка с понятным для человека именем пресета.

description

Необязательная строка с понятным для человека описанием пресета.

environment

Необязательный словарь переменных среды. Ключ — имя переменной (которое не может быть пустой строкой), а значение — либо null, либо строка, представляющая значение переменной. Каждая переменная устанавливается независимо от того, было ли ей присвоено значение в окружении процесса. Это поле поддерживает расширение макросов, и переменные среды в этом словаре могут ссылаться друг на друга, а также перечисляться в любом порядке, при условии, что такие ссылки не образуют цикл (например, если ENV_1 равно $env{ENV_2}, ENV_2 не может быть $env{ENV_1}.)

Переменные среды наследуются через поле inherits, и окружение пресета будет объединением собственного environment и environment всех его родительских пресетов. Если несколько пресетов в этом объединении определяют одну и ту же переменную, применяются стандартные правила inherits. Установка переменной в null приводит к тому, что она не устанавливается, даже если значение было унаследовано от другого пресета.

Примечание

Для проекта CMake, использующего ExternalProject с пресетом конфигурации, содержащим переменные среды, необходимые в ExternalProject, используйте пресет сборки, который наследует этот пресет конфигурации, иначе ExternalProject не получит переменные среды, установленные в пресете конфигурации. Например, предположим, что хост использует один компилятор (скажем, Clang), а пользователь хочет использовать другой (скажем, GCC). Установите переменные среды пресета конфигурации CC и CXX и используйте пресет сборки, который наследует этот пресет конфигурации. В противном случае ExternalProject может использовать другой (системный по умолчанию) компилятор, отличный от верхнего уровня проекта CMake.

configurePreset

Необязательная строка, определяющая имя пресета конфигурации, который следует связать с этим пресетом сборки. Если configurePreset не указан, он должен быть унаследован от пресета inherits (если этот пресет не скрыт). Директория сборки определяется из пресета конфигурации, поэтому сборка будет выполнена в той же директории, что и конфигурация.

inheritConfigureEnvironment

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

jobs

Необязательное целое число. Эквивалентно передаче --parallel или -j в командной строке.

targets

Необязательная строка или массив строк. Эквивалентно передаче --target или -t в командной строке. Поставщики могут игнорировать свойство targets или скрывать пресеты сборки, которые явно указывают цели. Это поле поддерживает расширение макросов.

configuration

Необязательная строка. Эквивалентно передаче --config в командной строке.

cleanFirst

Необязательный булевый тип. Если true, эквивалентно передаче --clean-first в командной строке.

verbose

Необязательный булевый тип. Если true, эквивалентно передаче --verbose в командной строке.

nativeToolOptions

Необязательный массив строк. Эквивалентно передаче опций после -- в командной строке. Значения массива поддерживают расширение макросов.

Пресет тестирования

Каждый элемент массива testPresets — это JSON-объект, который может содержать следующие поля:

name

Обязательная строка, представляющая имя пресета, удобное для машины. Этот идентификатор используется в опции ctest --preset. В объединении CMakePresets.json и CMakeUserPresets.json не должно быть двух пресетов тестирования в одной директории с одинаковым именем. Однако пресет тестирования может иметь то же имя, что и пресет конфигурации или сборки.

hidden

Необязательный булевый тип, определяющий, должен ли пресет быть скрытым. Если пресет скрыт, его нельзя использовать в аргументе --preset, и он не должен иметь действительного configurePreset, даже при наследовании. Скрытые пресеты предназначены для использования в качестве основы для других пресетов, которые наследуют их через поле inherits.

inherits

Необязательный массив строк, представляющий имена пресетов, от которых следует унаследовать. По умолчанию пресет наследует все поля от пресетов inherits, но может их переопределять по желанию (за исключением name, hidden, inherits, description, и displayName). Если несколько пресетов inherits предоставляют конфликтующие значения для одного и того же поля, предпочтение отдаётся более раннему пресету в списке inherits. Пресеты в CMakePresets.json не могут наследовать от пресетов в CMakeUserPresets.json.

Это поле также может быть строкой, что эквивалентно массиву, содержащему одну строку.

condition

Необязательный объект Condition. Допускается в файлах пресетов, определяющих версию 3 или выше.

vendor

Необязательная карта, содержащая информацию, специфичную для поставщика. CMake не интерпретирует содержимое этого поля, кроме проверки того, что это карта, если она существует. Однако она должна следовать тем же соглашениям, что и поле vendor на уровне корня. Если поставщики используют собственное поле vendor для каждого пресета, они должны реализовать наследование соответствующим образом, когда это уместно.

displayName

Необязательная строка с удобочитаемым именем пресета.

description

Необязательная строка с удобочитаемым описанием пресета.

environment

Необязательная карта переменных окружения. Ключ — имя переменной (которое не может быть пустой строкой), а значение — либо null, либо строка, представляющая значение переменной. Каждая переменная устанавливается независимо от того, было ли ей задано значение процессом или нет. Это поле поддерживает макроподстановку, и переменные окружения в этой карте могут ссылаться друг на друга и могут быть перечислены в любом порядке, при условии, что такие ссылки не образуют цикл (например, если ENV_1 равно $env{ENV_2}, ENV_2 не может быть равно $env{ENV_1}).

Переменные окружения наследуются через поле inherits, а окружение пресета будет объединением собственного environment и environment всех его родителей. Если несколько пресетов в этом объединении определяют одну и ту же переменную, применяются стандартные правила inherits. Установка переменной в null приводит к её не установке, даже если значение было унаследовано от другого пресета.

configurePreset

Необязательная строка, указывающая имя пресета конфигурации, который следует связать с этим тестовым пресетом. Если configurePreset не указано, оно должно быть унаследовано от пресета inherits (если этот пресет не скрыт). Директория сборки определяется по пресету конфигурации, поэтому тесты будут выполняться в той же binaryDir, что и конфигурация и сборка.

inheritConfigureEnvironment

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

configuration

Необязательная строка. Эквивалентно передаче --build-config в командной строке.

overwriteConfigurationFile

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

output

Необязательный объект, определяющий параметры вывода. Объект может содержать следующие поля.

shortProgress

Необязательный булевый параметр. Если true, эквивалентно передаче --progress в командной строке.

verbosity

Необязательная строка, определяющая уровень подробности. Должна быть одной из следующих:

default

Эквивалентно передаче флагов без подробности в командной строке.

verbose

Эквивалентно передаче --verbose в командной строке.

extra

Эквивалентно передаче --extra-verbose в командной строке.

debug

Необязательный булевый параметр. Если true, эквивалентно передаче --debug в командной строке.

outputOnFailure

Необязательный булевый параметр. Если true, эквивалентно передаче --output-on-failure в командной строке.

quiet

Необязательный булевый параметр. Если true, эквивалентно передаче --quiet в командной строке.

outputLogFile

Необязательная строка, определяющая путь к файлу журнала. Эквивалентно передаче --output-log в командной строке. Это поле поддерживает макроподстановку.

labelSummary

Необязательный булевый параметр. Если false, эквивалентно передаче --no-label-summary в командной строке.

subprojectSummary

Необязательный булевый параметр. Если false, эквивалентно передаче --no-subproject-summary в командной строке.

maxPassedTestOutputSize

Необязательное целое число, определяющее максимальный объём вывода для пройденных тестов в байтах. Эквивалентно передаче --test-output-size-passed в командной строке.

maxFailedTestOutputSize

Необязательное целое число, определяющее максимальный объём вывода для проваленных тестов в байтах. Эквивалентно передаче --test-output-size-failed в командной строке.

maxTestNameWidth

Необязательное целое число, определяющее максимальную ширину имени теста для вывода. Эквивалентно передаче --max-width в командной строке.

filter

Необязательный объект, определяющий, как фильтровать выполняемые тесты. Объект может содержать следующие поля.

include

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

name

Необязательная строка, определяющая регулярное выражение для имён тестов. Эквивалентно передаче --tests-regex в командной строке. Это поле поддерживает макроподстановку. Синтаксис регулярных выражений CMake описан в string(REGEX).

label

Необязательная строка, определяющая регулярное выражение для меток тестов. Эквивалентно передаче --label-regex в командной строке. Это поле поддерживает макроподстановку.

useUnion

Необязательный булевый параметр. Эквивалентно передаче --union в командной строке.

index

Необязательный объект, определяющий тесты для включения по индексу теста. Объект может содержать следующие поля. Также может быть необязательной строкой, определяющей файл с синтаксисом командной строки для --tests-information. Если указана как строка, это поле поддерживает макроподстановку.

start

Необязательное целое число, определяющее индекс теста для начала тестирования.

end

Необязательное целое число, определяющее индекс теста для остановки тестирования.

stride

Необязательное целое число, определяющее шаг.

specificTests

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

exclude

Необязательный объект, определяющий, какие тесты исключить. Объект может содержать следующие поля.

name

Необязательная строка, определяющая регулярное выражение для имён тестов. Эквивалентно передаче --exclude-regex в командной строке. Это поле поддерживает макроподстановку.

label

Необязательная строка, определяющая регулярное выражение для меток тестов. Эквивалентно передаче --label-exclude в командной строке. Это поле поддерживает макроподстановку.

fixtures

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

any

Необязательная строка, определяющая регулярное выражение для текстовых фикстур, которые исключить из добавления тестов. Эквивалентно --fixture-exclude-any в командной строке. Это поле поддерживает макроподстановку.

setup

Необязательная строка, определяющая регулярное выражение для текстовых фикстур, которые исключить из добавления тестовых установок. Эквивалентно --fixture-exclude-setup в командной строке. Это поле поддерживает макроподстановку.

cleanup

Необязательная строка, определяющая регулярное выражение для текстовых фикстур, которые исключить из добавления тестовых завершений. Эквивалентно --fixture-exclude-cleanup в командной строке. Это поле поддерживает макроподстановку.

execution

Необязательный объект, определяющий параметры выполнения теста. Объект может содержать следующие поля.

stopOnFailure

Необязательный булевый параметр. Если true, эквивалентно передаче --stop-on-failure в командной строке.

enableFailover

Необязательный булевый параметр. Если true, эквивалентно передаче -F в командной строке.

jobs

Необязательное целое число. Эквивалентно передаче --parallel в командной строке.

resourceSpecFile

Необязательная строка. Эквивалентно передаче --resource-spec-file в командной строке. Это поле поддерживает макроподстановку.

testLoad

Необязательное целое число. Эквивалентно передаче --test-load в командной строке.

showOnly

Необязательная строка. Эквивалентно передаче --show-only в командной строке. Строка должна быть одним из следующих значений:

human

json-v1

repeat

Необязательный объект, определяющий, как повторять тесты. Эквивалентно передаче --repeat в командной строке. Объект должен иметь следующие поля.

mode

Обязательная строка. Должна быть одним из следующих значений:

until-fail

until-pass

after-timeout

count

Обязательное целое число.

interactiveDebugging

Необязательный булевый параметр. Если true, эквивалентно передаче --interactive-debug-mode 1 в командной строке. Если false, эквивалентно передаче --interactive-debug-mode 0 в командной строке.

scheduleRandom

Необязательный булевый параметр. Если true, эквивалентно передаче --schedule-random в командной строке.

timeout

Необязательное целое число. Эквивалентно передаче --timeout в командной строке.

noTestsAction

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

default

Эквивалентно тому, что ни одно значение не передается в командной строке.

error

Эквивалентно передаче --no-tests=error в командной строке.

ignore

Эквивалентно передаче --no-tests=ignore в командной строке.

Condition

Поле condition пресета, допускаемое в файлах пресетов, определяющих версию 3 или выше, используется для определения того, включён пресет или нет. Например, это можно использовать для отключения пресета на платформах, отличных от Windows. condition может быть булевым значением, null, или объектом. Если это булево значение, оно указывает, включен или отключен пресет. Если это null, пресет включён, но условие null не наследуется никакими пресетами, которые могут унаследовать от пресета. Под-условия (например, в not, anyOf, или allOf условии) не могут быть null. Если это объект, он имеет следующие поля:

type

Обязательная строка с одним из следующих значений:

"const"

Указывает, что условие является постоянным. Это эквивалентно использованию булевого значения вместо объекта. Объект условия будет иметь следующие дополнительные поля:

value

END_OF_DOCUMENT_MARKER

Требуемое булево значение, предоставляющее постоянное значение для оценки условия.

"equals"

"notEquals"

Указывает, что условие сравнивает две строки, чтобы определить, равны ли они (или не равны). Объект условия будет содержать следующие дополнительные поля:

lhs

Первая строка для сравнения. Это поле поддерживает расширение макросов.

rhs

Вторая строка для сравнения. Это поле поддерживает расширение макросов.

"inList"

"notInList"

Указывает, что условие ищет строку в списке строк. Объект условия будет содержать следующие дополнительные поля:

string

Требуемая строка для поиска. Это поле поддерживает расширение макросов.

list

Требуемый список строк для поиска. Это поле поддерживает расширение макросов и использует краткую оценку.

"matches"

"notMatches"

Указывает, что условие ищет регулярное выражение в строке. Объект условия будет содержать следующие дополнительные поля:

string

Требуемая строка для поиска. Это поле поддерживает расширение макросов.

regex

Требуемое регулярное выражение для поиска. Это поле поддерживает расширение макросов.

"anyOf"

"allOf"

Указывает, что условие является агрегацией нуля или более вложенных условий. Объект условия будет содержать следующие дополнительные поля:

conditions

Требуемый массив объектов условий. Эти условия используют краткую оценку.

"not"

Указывает, что условие является инверсией другого условия. Объект условия будет содержать следующие дополнительные поля:

condition

Требуемый объект условия.

Расширение макросов

Как упоминалось выше, некоторые поля поддерживают расширение макросов. Макросы распознаются в формате $<macro-namespace>{<macro-name>}. Все макросы оцениваются в контексте используемого набора параметров, даже если макрос находится в поле, унаследованном от другого набора параметров. Например, если набор параметров Base устанавливает переменную PRESET_NAME в ${presetName}, и набор параметров Derived наследуется от Base, PRESET_NAME будет установлено в Derived.

Ошибкой является отсутствие закрывающей фигурной скобки в конце имени макроса. Например, ${sourceDir является недопустимым. Знак доллара ($) за которым следует любой символ, кроме левой фигурной скобки ({) с возможным именем пространства имён, интерпретируется как буквальный знак доллара.

Распознанные макросы включают:

${sourceDir}

Путь к каталогу исходных кодов проекта.

${sourceParentDir}

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

${sourceDirName}

Последний компонент имени файла ${sourceDir}. Например, если ${sourceDir} равно /path/to/source, то это будет source.

${presetName}

Имя, указанное в поле name набора параметров.

${generator}

Генератор, указанный в поле generator набора параметров. Для наборов параметров сборки и тестирования это будет равно генератору, указанному configurePreset.

${hostSystemName}

Имя операционной системы хоста. Содержит то же значение, что и CMAKE_HOST_SYSTEM_NAME. Это разрешено в файлах наборов параметров, определяющих версию 3 или выше.

${dollar}

Буквальный знак доллара ($).

$env{<variable-name>}

Переменная среды с именем <variable-name>. Имя переменной не должно быть пустой строкой. Если переменная определена в поле environment, используется это значение вместо значения из родительской среды. Если переменная среды не определена, это оценивается как пустая строка.

Обратите внимание, что хотя имена переменных среды Windows не чувствительны к регистру, имена переменных в наборе параметров по-прежнему чувствительны к регистру. Это может привести к неожиданным результатам при использовании несогласованных регистров. Для достижения наилучших результатов сохраняйте регистр имён переменных среды согласованным.

$penv{<variable-name>}

Аналогично $env{<variable-name>}, за исключением того, что значение берется только из родительской среды и никогда из поля environment . Это позволяет вам добавлять или приписывать значения к существующим переменным среды. Например, установка PATH в /path/to/ninja/bin:$penv{PATH} добавит /path/to/ninja/bin к переменной среды PATH . Это необходимо, поскольку $env{<variable-name>} не допускает циклических ссылок.

$vendor{<macro-name>}

Точка расширения для поставщиков, чтобы вставить свои собственные макросы. CMake не сможет использовать наборы параметров, которые имеют макрос $vendor{<macro-name>}, и фактически игнорирует такие наборы параметров. Однако он по-прежнему сможет использовать другие наборы параметров из того же файла.

CMake не пытается интерпретировать макросы $vendor{<macro-name>}. Однако для предотвращения конфликтов имён поставщики IDE должны префикс <macro-name> очень коротким (желательно <= 4 символов) префиксом идентификатора поставщика, за которым следует ., за которым следует имя макроса. Например, у Example IDE может быть $vendor{xide.ideInstallDir}.

Схема

This file предоставляет удобочитаемую JSON-схему для формата CMakePresets.json.

© 2000–2021 Kitware, Inc. and Contributors
Licensed under the BSD 3-clause License.
https://cmake.org/cmake/help/v3.21/manual/cmake-presets.7.html

Spec-Zone.ru

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