cmake-presets(7)
Введение
Новая версия 3.19.
Пользователи CMake часто сталкиваются с проблемой совместного использования настроек проекта для стандартных способов конфигурации. Это может быть сделано для поддержки CI-сборок или для пользователей, часто использующих одинаковую сборку. CMake поддерживает два основных файла, CMakePresets.json и CMakeUserPresets.json, которые позволяют пользователям указывать общие параметры конфигурации и делиться ими с другими. CMake также поддерживает файлы, включаемые с помощью поля include.
CMakePresets.json и CMakeUserPresets.json находятся в корневом каталоге проекта. У них одинаковый формат, и оба являются необязательными (хотя хотя бы один должен быть присутствовать, если указан --preset). CMakePresets.json предназначен для указания данных сборки для всего проекта, а CMakeUserPresets.json предназначен для разработчиков для указания собственных локальных данных сборки.
CMakePresets.json можно добавить в систему управления версиями, а CMakeUserPresets.json не нужно добавлять. Например, если проект использует Git, CMakePresets.json можно отслеживать, а CMakeUserPresets.json следует добавить в .gitignore.
Формат
Файлы представляют собой JSON-документ с объектом в качестве корня:
{
"version": 6,
"cmakeMinimumRequired": {
"major": 3,
"minor": 23,
"patch": 0
},
"include": [
"otherThings.json",
"moreThings.json"
],
"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}
}
],
"packagePresets": [
{
"name": "default",
"configurePreset": "default",
"generators": [
"TGZ"
]
}
],
"workflowPresets": [
{
"name": "default",
"steps": [
{
"type": "configure",
"name": "default"
},
{
"type": "build",
"name": "default"
},
{
"type": "test",
"name": "default"
},
{
"type": "package",
"name": "default"
}
]
}
],
"vendor": {
"example.com/ExampleIDE/1.0": {
"autoFormat": false
}
}
}
Корневой объект распознает следующие поля:
-
$schema -
Необязательная строка, предоставляющая URI к JSON-схеме, описывающей структуру этого JSON-документа. Это поле используется для проверки и автодополнения в редакторах, поддерживающих JSON-схему. Оно не влияет на поведение самого документа. Если это поле не указано, JSON-документ по-прежнему будет валидным, но инструменты, использующие JSON-схему для проверки и автодополнения, могут работать некорректно. Это разрешено в файлах пресетов, использующих версию
8или выше. -
version -
Обязательное целое число, представляющее версию JSON-схемы. Поддерживаемые версии:
-
1 -
Новая версия 3.19.
-
2 -
Новая версия 3.20.
-
3 -
Новая версия 3.21.
-
4 -
Новая версия 3.23.
-
5 -
Новая версия 3.24.
-
6 -
Новая версия 3.25.
-
7 -
Новая версия 3.27.
-
8 -
Новая версия 3.28.
-
-
cmakeMinimumRequired -
Необязательный объект, представляющий минимальную версию CMake, необходимую для построения проекта. Этот объект состоит из следующих полей:
-
major -
Необязательное целое число, представляющее основную версию.
-
minor -
Необязательное целое число, представляющее второстепенную версию.
-
patch -
Необязательное целое число, представляющее версию исправления.
-
-
include -
Необязательный массив строк, представляющий файлы для включения. Если имена файлов не абсолютные, они считаются относительными к текущему файлу. Это разрешено в файлах пресетов, использующих версию
4или выше. См. Включения для обсуждения ограничений на включенные файлы. -
vendor -
Необязательный словарь, содержащий информацию, специфичную для поставщика. CMake не интерпретирует содержимое этого поля, кроме проверки, что это словарь, если он существует. Однако ключи должны быть доменным именем поставщика, за которым следует путь, разделенный
/. Например, пример IDE 1.0 может использоватьexample.com/ExampleIDE/1.0. Значение каждого поля может быть любым, что требуется поставщику, хотя обычно это будет словарь. -
configurePresets -
Необязательный массив объектов Настройка предопределения. Это разрешено в файлах пресетов, использующих версию
1или выше. -
buildPresets -
Необязательный массив объектов Предопределения сборки. Это разрешено в файлах пресетов, использующих версию
2или выше. -
testPresets -
Необязательный массив объектов Предопределения тестирования. Это разрешено в файлах пресетов, использующих версию
2или выше. -
packagePresets -
Необязательный массив объектов Предопределения пакета. Это разрешено в файлах пресетов, использующих версию
6или выше. -
workflowPresets -
Необязательный массив объектов Предопределения рабочего процесса. Это разрешено в файлах пресетов, использующих версию
6или выше.
Включения
CMakePresets.json и CMakeUserPresets.json могут включать другие файлы с полем include в версии файлов 4 и выше. Включаемые файлы также могут включать другие файлы. Если CMakePresets.json и CMakeUserPresets.json присутствуют оба, CMakeUserPresets.json неявно включает CMakePresets.json, даже без поля include, во всех версиях формата.
Если файл пресета содержит пресеты, наследующие от пресетов в другом файле, файл должен включать этот другой файл прямо или косвенно. Циклы включения между файлами не допускаются. Если a.json включает b.json, то b.json не может включать a.json. Однако файл может быть включён несколько раз из одного или разных файлов.
Файлы, прямо или косвенно включенные из CMakePresets.json, должны быть гарантированно предоставлены проектом. CMakeUserPresets.json может включать файлы из любой точки.
Начиная с версии 7, поле include поддерживает подстановку макросов, но только $penv{} подстановку макросов.
Настройка предопределения
Каждый элемент массива 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 -
Необязательный объект Condition. Это разрешено в файлах пресетов, определяющих версию
3или выше. -
vendor -
Необязательная карта, содержащая информацию, специфичную для поставщика. CMake не интерпретирует содержимое этого поля, за исключением проверки того, что это карта, если она существует. Однако она должна следовать тем же соглашениям, что и поле
vendorна корневом уровне. Если поставщики используют собственное полеvendorдля каждого пресета, они должны реализовать наследование осмысленно, когда это уместно. -
displayName -
Необязательная строка с удобочитаемым именем пресета.
-
description -
Необязательная строка с удобочитаемым описанием пресета.
-
generator -
Необязательная строка, представляющая генератор, который нужно использовать для пресета. Если
generatorне указан, он должен быть унаследован от пресетаinherits(если этот пресет неhidden). В версии3или выше, это поле может быть опущено, чтобы использовать стандартный процесс поиска генератора.Обратите внимание, что для генераторов Visual Studio, в отличие от командной строки
-Gаргумента, вы не можете включить имя платформы в имя генератора. Используйте полеarchitectureвместо этого. -
architecture, toolset -
Необязательные поля, представляющие платформу и набор инструментов соответственно, для
generators, которые их поддерживают.См. опцию
cmake -Aдля возможных значений дляarchitectureиcmake -Tдляtoolset.Каждое поле может быть либо строкой, либо объектом со следующими полями:
-
value -
Необязательная строка, представляющая значение.
-
strategy -
Необязательная строка, указывающая CMake, как обработать поле
architectureилиtoolset. Допустимые значения:-
"set" -
Установить соответствующее значение. Это приведёт к ошибке для генераторов, которые не поддерживают соответствующее поле.
-
"external" -
Не устанавливать значение, даже если генератор его поддерживает. Это полезно, например, если пресет использует генератор Ninja, а IDE знает, как настроить среду Visual C++ из полей
architectureиtoolset. В этом случае CMake проигнорирует поле, но IDE может использовать их для настройки среды перед вызовом CMake.
Если поле
strategyне задано или поле использует строковую форму вместо объектной, поведение такое же, как"set". -
-
-
toolchainFile -
Необязательная строка, представляющая путь к файлу цепочки инструментов. Это поле поддерживает расширение макросов. Если указан относительный путь, он вычисляется относительно каталога сборки, а если не найден, относительно каталога исходного кода. Это поле имеет приоритет над любым значением
CMAKE_TOOLCHAIN_FILE. Разрешено в файлах пресетов версии3или выше. -
binaryDir -
Необязательная строка, представляющая путь к каталогу выходных бинарных файлов. Это поле поддерживает расширение макросов. Если указан относительный путь, он вычисляется относительно каталога исходного кода. Если
binaryDirне указан, он должен быть унаследован от пресетаinherits(если этот пресет неhidden). В версии3или выше, это поле может быть опущено. -
installDir -
Необязательная строка, представляющая путь к каталогу установки. Это поле поддерживает расширение макросов. Если указан относительный путь, он вычисляется относительно каталога исходного кода. Разрешено в файлах пресетов версии
3или выше. -
cmakeExecutable -
Необязательная строка, представляющая путь к исполняемому файлу CMake, который нужно использовать для этого пресета. Это зарезервировано для использования IDE и не используется самим CMake. IDE, использующие это поле, должны расширять все макросы в нём.
-
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в командной строке.
-
-
trace -
Дополнительный объект, определяющий параметры трассировки. Допускается в файлах предварительной настройки, определяющих версию
7. Объект может содержать следующие поля:-
mode -
Необязательная строка, определяющая режим трассировки. Допустимые значения:
-
on -
Выводит трассировку всех выполненных вызовов и откуда они были вызваны. Эквивалентно передаче
--traceв командной строке. -
off -
Трассировка всех вызовов не будет выведена.
-
expand -
Выводит трассировку с раскрытыми переменными всех выполненных вызовов и откуда они были вызваны. Эквивалентно передаче
--trace-expandв командной строке.
-
-
format -
Необязательная строка, определяющая формат вывода трассировки. Допустимые значения:
-
human -
Выводит каждую строку трассировки в удобочитаемом формате. Это формат по умолчанию. Эквивалентно передаче
--trace-format=humanв командной строке. -
json-v1 -
Выводит каждую строку как отдельный JSON документ. Эквивалентно передаче
--trace-format=json-v1в командной строке.
-
-
source -
Необязательный массив строк, представляющих пути к исходным файлам, подлежащим трассировке. Это поле также может быть строкой, что эквивалентно массиву, содержащему одну строку. Эквивалентно передаче
--trace-sourceв командной строке. -
redirect -
Необязательная строка, определяющая путь к файлу вывода трассировки. Эквивалентно передаче
--trace-redirectв командной строке.
-
Настройка сборки
Каждый элемент массива buildPresets — это JSON-объект, который может содержать следующие поля:
-
name -
Обязательная строка, представляющая удобочитаемое имя пресета. Этот идентификатор используется в опции cmake --build --preset. Не должно быть двух пресетов сборки в объединении
CMakePresets.jsonиCMakeUserPresets.jsonв одном каталоге с одинаковым именем. Однако, пресет сборки может иметь то же имя, что и пресет конфигурации, тестирования, пакета или рабочего процесса. -
hidden -
Необязательный булев параметр, определяющий, должен ли пресет быть скрытым. Если пресет скрыт, он не может быть использован в аргументе
--presetи не должен иметь допустимое значениеconfigurePreset, даже по наследованию.hiddenпресеты предназначены для использования в качестве базовых для других пресетов, которые будут наследоваться через поле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не указано, оно должно быть унаследовано от пресета наследования (если этот пресет не скрыт). Директория сборки определяется по пресету конфигурации, поэтому сборка будет выполнена в той жеbinaryDir, что и конфигурация. -
inheritConfigureEnvironment -
Необязательный булев параметр, по умолчанию равный true. Если true, переменные среды из связанного пресета конфигурации наследуются после всех унаследованных сред пресетов сборки, но перед переменными среды, явно указанными в этом пресете сборки.
-
jobs -
Необязательное целое число. Эквивалентно передаче
--parallelили-jв командной строке. -
targets -
Необязательная строка или массив строк. Эквивалентно передаче
--targetили-tв командной строке. Поставщики могут игнорировать свойство targets или скрывать пресеты сборки, которые явно указывают targets. Это поле поддерживает макрорасширение. -
configuration -
Необязательная строка. Эквивалентно передаче
--configв командной строке. -
cleanFirst -
Необязательный булев параметр. Если true, эквивалентно передаче
--clean-firstв командной строке. -
resolvePackageReferences -
Необязательная строка, определяющая режим разрешения пакета. Это разрешено в файлах пресетов, определяющих версию
4или выше.Ссылки на пакеты используются для определения зависимостей от пакетов из внешних менеджеров пакетов. В настоящее время поддерживается только NuGet в сочетании с генератором Visual Studio. Если нет целевых задач, определяющих ссылки на пакеты, эта опция ничего не делает. Допустимые значения:
-
on -
Приводит к разрешению ссылок на пакеты перед попыткой сборки.
-
off -
Ссылки на пакеты не будут разрешаться. Обратите внимание, что это может привести к ошибкам в некоторых средах сборки, таких как проекты в стиле .NET SDK.
-
only -
Разрешить только ссылки на пакеты, но не выполнять сборку.
Примечание
Параметр командной строки
--resolve-package-referencesбудет иметь приоритет над этим параметром. Если параметр командной строки не указан и этот параметр не задан, будет проверена переменная кэша, специфичная для среды, чтобы определить, следует ли выполнять восстановление пакетов.При использовании генератора Visual Studio ссылки на пакеты определяются с помощью свойства
VS_PACKAGE_REFERENCES. Восстановление ссылок на пакеты выполняется с помощью NuGet. Его можно отключить, установив переменнуюCMAKE_VS_NUGET_PACKAGE_RESTOREвOFF. Это также можно сделать внутри пресета конфигурации. -
-
verbose -
Необязательный булев параметр. Если true, эквивалентно передаче
--verboseв командной строке. -
nativeToolOptions -
Необязательный массив строк. Эквивалентно передаче параметров после
--в командной строке. Значения массива поддерживают макрорасширение.
Пресет тестирования
Каждый элемент массива testPresets — это JSON-объект, который может содержать следующие поля:
-
name -
Обязательная строка, представляющая удобное для машины имя пресета. Этот идентификатор используется в опции
ctest --preset. В одном каталоге не должно быть двух тестовых пресетов в объединенииCMakePresets.jsonиCMakeUserPresets.jsonс одинаковым именем. Однако, тестовый пресет может иметь такое же имя, как и конфигурационный, билдовый, пакетный или рабочий пресет. -
hidden -
Необязательный булевый параметр, указывающий, должен ли пресет быть скрытым. Если пресет скрыт, он не может быть использован в аргументе
--presetи не должен иметь валидногоconfigurePreset, даже по наследованию.hiddenпресеты предназначены для использования в качестве основы для других пресетов, которые наследуют их через поле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в командной строке. Это поле поддерживает макроподстановку. -
outputJUnitFile -
Необязательная строка, определяющая путь к файлу JUnit. Эквивалентно передаче
--output-junitв командной строке. Это поле поддерживает макроподстановку. Разрешено в файлах пресетов, указывающих версию6или выше. -
labelSummary -
Необязательный булевый параметр. Если false, эквивалентно передаче
--no-label-summaryв командной строке. -
subprojectSummary -
Необязательный булевый параметр. Если false, эквивалентно передаче
--no-subproject-summaryв командной строке. -
maxPassedTestOutputSize -
Необязательное целое число, определяющее максимальный объем вывода для пройденных тестов в байтах. Эквивалентно передаче
--test-output-size-passedв командной строке. -
maxFailedTestOutputSize -
Необязательное целое число, определяющее максимальный объем вывода для проваленных тестов в байтах. Эквивалентно передаче
--test-output-size-failedв командной строке. -
testOutputTruncation -
Необязательная строка, определяющая режим усечения вывода тестов. Эквивалентно передаче
--test-output-truncationв командной строке. Разрешено в файлах пресетов, указывающих версию5или выше. -
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в командной строке. Строка должна быть одним из следующих значений:humanjson-v1 -
repeat -
Необязательный объект, определяющий, как повторять тесты. Эквивалентно передаче
--repeatв командной строке. Объект должен иметь следующие поля.-
mode -
Обязательная строка. Должна быть одним из следующих значений:
until-failuntil-passafter-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в командной строке.
-
-
Набор параметров пакета
Наборы параметров пакетов могут использоваться в схеме версии 6 или выше. Каждый элемент массива packagePresets — это JSON-объект, который может содержать следующие поля:
-
name -
Требуемая строка, представляющая имя пресета, удобное для машины. Этот идентификатор используется в опции
cpack --preset. В одном каталоге не должно быть двух пресетов пакетов с одинаковым именем в объединенииCMakePresets.jsonиCMakeUserPresets.json. Однако, пресет пакета может иметь такое же имя, как пресет конфигурации, сборки, тестирования или рабочего процесса. -
hidden -
Необязательный булевый параметр, определяющий, должен ли быть скрыт пресет. Если пресет скрыт, он не может быть использован в аргументе
--presetи не должен иметь действительногоconfigurePreset, даже по наследованию.hiddenпресеты предназначены для использования в качестве базовых для других пресетов, которые могут наследоваться через полеinherits. -
inherits -
Необязательный массив строк, представляющий имена пресетов, от которых следует наследовать. Это поле также может быть строкой, что эквивалентно массиву, содержащему одну строку.
По умолчанию пресет будет наследовать все поля от
inheritsпресетов (кромеname,hidden,inherits,description, иdisplayName), но может переопределять их по желанию. Если несколькоinheritsпресетов предоставляют противоречивые значения для одного поля, то пресет, расположенный раньше в массивеinherits, будет предпочтительным.Презет может наследовать только от другого пресета, определенного в том же файле или в одном из файлов, которые он включает (прямо или косвенно). Пресеты в
CMakePresets.jsonне могут наследовать от пресетов вCMakeUserPresets.json. -
condition -
Необязательный объект Condition.
-
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, переменные среды из связанного пресета конфигурации наследуются после всех унаследованных сред пресетов пакета, но перед переменными среды, явно указанными в этом пресете пакета.
-
generators -
Необязательный массив строк, представляющих генераторы, которые следует использовать для CPack.
-
configurations -
Необязательный массив строк, представляющих конфигурации сборки, которые CPack должен упаковать.
-
variables -
Необязательная карта переменных, передаваемых в CPack, эквивалентная аргументам
-D. Каждый ключ — имя переменной, а значение — строка, которая должна быть назначена этой переменной. -
configFile -
Необязательная строка, представляющая конфигурационный файл для CPack.
-
output -
Необязательный объект, определяющий параметры вывода. Допустимые ключи:
-
debug -
Необязательный булевый параметр, определяющий, нужно ли печатать отладочную информацию. Значение
trueэквивалентно передаче--debugв командной строке. -
verbose -
Необязательный булевый параметр, определяющий, нужно ли печатать подробную информацию. Значение
trueэквивалентно передаче--verboseв командной строке.
-
-
packageName -
Необязательная строка, представляющая имя пакета.
-
packageVersion -
Необязательная строка, представляющая версию пакета.
-
packageDirectory -
Необязательная строка, представляющая каталог, в котором нужно разместить пакет.
-
vendorName -
Необязательная строка, представляющая имя поставщика.
Пресет рабочего процесса
Пресеты рабочего процесса могут быть использованы в схемах версии 6 или выше. Каждый элемент массива workflowPresets — это JSON-объект, который может содержать следующие поля:
-
name -
Требуемая строка, представляющая имя пресета, удобное для машины. Этот идентификатор используется в опции cmake --workflow --preset. В одном каталоге не должно быть двух пресетов рабочего процесса в объединении
CMakePresets.jsonиCMakeUserPresets.jsonс одинаковым именем. Однако, пресет рабочего процесса может иметь такое же имя, как пресет конфигурации, сборки, тестирования или пакета. -
vendor -
Необязательная карта, содержащая информацию, специфичную для поставщика. CMake не интерпретирует содержимое этого поля, кроме проверки, что это карта, если она существует. Однако она должна следовать тем же соглашениям, что и корневое поле
vendor. -
displayName -
Необязательная строка с понятным для человека именем пресета.
-
description -
Необязательная строка с понятным для человека описанием пресета.
-
steps -
Требуемый массив объектов, описывающих шаги рабочего процесса. Первый шаг должен быть пресетом конфигурации, а все последующие шаги должны быть пресетами, не являющимися пресетами конфигурации, и у которых поле
configurePresetсоответствует начальному пресету конфигурации. Каждый объект может содержать следующие поля:-
type -
Требуемая строка. Первый шаг должен быть
configure. Последующие шаги должны быть либоbuild, либоtest, либоpackage. -
name -
Требуемая строка, представляющая имя пресета конфигурации, сборки, тестирования или пакета, который следует выполнить в качестве этого шага рабочего процесса.
-
Условие
Поле condition пресета, разрешенное в файлах пресетов, указывающих версию 3 или выше, используется для определения того, включен ли пресет. Например, это может быть использовано для отключения пресета на платформах, отличных от Windows. condition может быть булевым значением, null, или объектом. Если это булево значение, то булево значение указывает, включен или отключен пресет. Если это null, то пресет включен, но условие null не наследуется ни одним пресетом, который может наследовать от пресета. Под-условия (например, в условии not, anyOf, или allOf) не могут быть null. Если это объект, у него есть следующие поля:
-
type -
Обязательная строка с одним из следующих значений:
-
"const" -
Указывает, что условие является постоянным. Это эквивалентно использованию булевого значения вместо объекта. Объект условия будет иметь следующие дополнительные поля:
-
value -
Обязательное булево значение, которое предоставляет постоянное значение для оценки условия.
-
"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} -
Путь к каталогу исходного кода проекта (то же, что и
CMAKE_SOURCE_DIR). -
${sourceParentDir} -
Путь к каталогу родителя каталога исходного кода проекта.
-
${sourceDirName} -
Последний компонент имени файла в
${sourceDir}. Например, если${sourceDir}равно/path/to/source, то это будетsource. -
${presetName} -
Имя, указанное в поле
nameнабора параметров. -
${generator} -
Генератор, указанный в поле
generatorнабора параметров. Для наборов параметров сборки и тестирования это будет соответствовать генератору, указанному вconfigurePreset. -
${hostSystemName} -
Имя операционной системы хоста. Содержит такое же значение, как и
CMAKE_HOST_SYSTEM_NAME. Это разрешено в файлах наборов параметров, определяющих версию3или выше. -
${fileDir} -
Путь к каталогу, содержащему файл набора параметров, который содержит макрос. Это разрешено в файлах наборов параметров, определяющих версию
4или выше. -
${dollar} -
Буквальный знак доллара (
$). -
${pathListSep} -
Символ, используемый для разделения списков путей, таких как
:или;.Например, установив
PATHв/path/to/ninja/bin${pathListSep}$env{PATH},${pathListSep}будет расширено до символа, используемого подлежащей операционной системой для конкатенации вPATH.Это разрешено в файлах наборов параметров, определяющих версию
5или выше. -
$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–2024 Kitware, Inc. and Contributors
Licensed under the BSD 3-clause License.
https://cmake.org/cmake/help/v3.28/manual/cmake-presets.7.html