cmake 预设 (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
}
}
}
根对象识别以下字段:
版本表示 JSON 架构版本的必需整数。支持的版本是:
1在 3.19 版本加入.
2在 3.20 版本加入.
3在 3.21 版本加入.
4在 3.23 版本加入.
5在 3.24 版本加入.
6在 3.25 版本加入.
cmakeMinimumRequired一个可选对象,表示构建此项目所需的最低 CMake 版本。该对象由以下字段组成:
主要代表主要版本的可选整数。
未成年人代表次要版本的可选整数。
补丁表示补丁版本的可选整数。
包括一个可选的字符串数组,表示要包含的文件。如果文件名不是绝对的,则它们被认为是相对于当前文件的。这在指定版本“4”或更高版本的预设文件中是允许的。有关包含文件的约束的讨论,请参阅“包含”。
供应商包含供应商特定信息的可选映射。 CMake 不解释此字段的内容,除非它是一个映射(如果它确实存在)。但是,密钥应该是特定于供应商的域名,后跟“/”分隔的路径。例如,示例 IDE 1.0 可以使用
example.com/ExampleIDE/1.0。每个字段的值可以是供应商想要的任何值,但通常是地图。配置预设Configure Preset 对象的可选数组。这在指定版本“1”或更高版本的预设文件中是允许的。
buildPresetsBuild Preset 对象的可选数组。这在指定版本“2”或更高版本的预设文件中是允许的。
测试预设可选的“测试预设”对象数组。这在指定版本“2”或更高版本的预设文件中是允许的。
packagePresets一个可选的 Package Preset 对象数组。这在指定版本“6”或更高版本的预设文件中是允许的。
workflowPresetsWorkflow Preset 对象的可选数组。这在指定版本“6”或更高版本的预设文件中是允许的。
包括¶
CMakePresets.json 和 CMakeUserPresets.json 可以在文件版本 4 及更高版本中使用 include 字段包含其他文件。这些文件包含的文件还可以包含其他文件。如果 CMakePresets.json 和 CMakeUserPresets.json 都存在,CMakeUserPresets.json 在所有版本中隐式包含 CMakePresets.json,即使没有 include 字段的格式。
如果预设文件包含从另一个文件中的预设继承的预设,则该文件必须直接或间接包含另一个文件。文件之间不允许包含循环。如果 a.json 包含 b.json,则 b.json 不能包含 a.json。但是,一个文件可能会从同一个文件或不同文件中多次包含。
CMakePresets.json 中直接或间接包含的文件应保证由项目提供。 CMakeUserPresets.json 可能包含来自任何地方的文件。
配置预设¶
configurePresets 数组的每个条目都是一个 JSON 对象,可能包含以下字段:
名字表示预设的机器友好名称的必需字符串。此标识符用于 cmake --preset 选项。
CMakePresets.json和CMakeUserPresets.json的并集在同一目录中不能有两个同名的配置预设。但是,配置预设可能与构建、测试、包或工作流预设具有相同的名称。隐藏一个可选的布尔值,指定是否应隐藏预设。如果预设是隐藏的,则不能在
--preset=参数中使用,也不会出现在CMake GUI中,并且不必一个有效的generator或binaryDir,甚至来自继承。hidden预设旨在用作其他预设通过inherits字段继承的基础。继承一个可选的字符串数组,表示要继承的预设的名称。该字段也可以是字符串,相当于一个包含一个字符串的数组。
默认情况下,预设将继承“inherits”预设中的所有字段(“name”、“hidden”、“inherits”、“description”和“displayName”除外) ), 但可以根据需要覆盖它们。如果多个
inherits预设为同一字段提供冲突的值,则inherits数组中较早的预设将是首选。预设只能继承自同一文件或它包含的其中一个文件(直接或间接)中定义的另一个预设。
CMakePresets.json中的预设可能不会继承自CMakeUserPresets.json中的预设。条件一个可选的“条件”对象。这在指定版本“3”或更高版本的预设文件中是允许的。
供应商包含供应商特定信息的可选映射。 CMake 不解释此字段的内容,除非它是一个映射(如果它确实存在)。但是,它应该遵循与根级“vendor”字段相同的约定。如果供应商使用他们自己的预设“vendor”字段,他们应该在适当的时候以合理的方式实现继承。
显示名称带有人性化预设名称的可选字符串。
描述一个可选的字符串,带有对预设的人性化描述。
生成器一个可选字符串,表示用于预设的生成器。如果未指定
generator,则必须从inherits预设继承(除非此预设为hidden)。在版本3或更高版本中,可以省略此字段以回退到常规生成器发现过程。请注意,对于 Visual Studio 生成器,与命令行中的
-G参数不同,您不能在生成器名称中包含平台名称。请改用architecture字段。架构,工具集代表平台和工具集的可选字段,分别用于:manual:generators <cmake-generators(7)> 支持它们。
请参阅:option:cmake -A 选项以了解
architecture的可能值和cmake -T用于toolset。每个都可以是字符串或具有以下字段的对象:
价值表示值的可选字符串。
策略一个可选的字符串,告诉 CMake 如何处理
architecture或toolset字段。有效值为:“设置”设置相应的值。对于不支持相应字段的生成器,这将导致错误。
“外部”不要设置该值,即使生成器支持它。例如,如果预设使用 Ninja 生成器,并且 IDE 知道如何从
architecture和toolset字段设置 Visual C++ 环境,这将很有用。在这种情况下,CMake 将忽略该字段,但 IDE 可以使用它们在调用 CMake 之前设置环境。
如果没有给出
strategy字段,或者如果该字段使用字符串形式而不是对象形式,则行为与"set"相同。
工具链文件表示工具链文件路径的可选字符串。该字段支持`宏扩展`_。如果指定了相对路径,则相对于构建目录进行计算,如果找不到,则相对于源目录进行计算。该字段优先于任何
CMAKE_TOOLCHAIN_FILE值。在指定版本“3”或更高版本的预设文件中是允许的。binaryDir表示输出二进制目录路径的可选字符串。该字段支持`宏扩展`_。如果指定了相对路径,则它是相对于源目录计算的。如果未指定
binaryDir,则必须从inherits预设继承(除非此预设为hidden)。在版本3或更高版本中,此字段可以省略。安装目录表示安装目录路径的可选字符串。该字段支持`宏扩展`_。如果指定了相对路径,则它是相对于源目录计算的。这在指定版本“3”或更高版本的预设文件中是允许的。
cmakeExecutable一个可选字符串,表示用于此预设的 CMake 可执行文件的路径。这是保留给 IDE 使用的,CMake 本身不使用。使用该字段的 IDE 应该扩展其中的任何宏。
缓存变量缓存变量的可选映射。键是变量名(可能不是空字符串),值是
null,一个布尔值(相当于"TRUE"或"FALSE" 的值和一种BOOL类型),表示变量值的字符串(支持 宏扩展),或具有以下字段的对象:类型表示变量类型的可选字符串。
价值表示变量值的必需字符串或布尔值。布尔值等同于“真”或“假”。该字段支持`宏扩展`_。
缓存变量通过
inherits字段继承,preset 的变量将是它自己的cacheVariables和来自其所有父项的cacheVariables的联合。如果此联合中的多个预设定义相同的变量,则应用“继承”的标准规则。将变量设置为“null”会导致它不被设置,即使值是从另一个预设继承的。环境环境变量的可选映射。键是变量名(可能不是空字符串),值是“null”或表示变量值的字符串。无论进程环境是否给它赋值,每个变量都会被设置。该字段支持`宏扩展`_,并且该映射中的环境变量可以相互引用,并且可以以任意顺序列出,只要这样的引用不会导致循环(例如,如果``ENV_1``是` $env{ENV_2}`,
ENV_2可能不是$env{ENV_1}。)环境变量通过
inherits字段继承,预设的环境将是它自己的environment和来自它所有父级的environment的联合。如果此联合中的多个预设定义相同的变量,则应用“继承”的标准规则。将变量设置为“null”会导致它不被设置,即使值是从另一个预设继承的。警告一个可选对象,指定要启用的警告。该对象可能包含以下字段:
开发一个可选的布尔值。相当于在命令行上传递
-Wdev或-Wno-dev。如果errors.dev设置为true,则不能设置为false。已弃用一个可选的布尔值。相当于在命令行上传递
-Wdeprecated或-Wno-deprecated。如果errors.deprecated设置为true,则不能设置为false。未初始化一个可选的布尔值。将此设置为
true相当于在命令行上传递:option:--warn-uninitialized <cmake --warn-uninitialized>。unusedCli一个可选的布尔值。将此设置为
false相当于在命令行上传递:option:--no-warn-unused-cli <cmake --no-warn-unused-cli>。系统变量一个可选的布尔值。将此设置为
true相当于在命令行上传递:option:--check-system-vars <cmake --check-system-vars>。
错误一个可选对象,指定要启用的错误。该对象可能包含以下字段:
开发一个可选的布尔值。相当于在命令行上传递
-Werror=dev或-Wno-error=dev。如果warnings.dev设置为false,这可能不会设置为true。已弃用一个可选的布尔值。相当于在命令行上传递
-Werror=deprecated或-Wno-error=deprecated。如果warnings.deprecated设置为false,这可能不会设置为true。
调试指定调试选项的可选对象。该对象可能包含以下字段:
输出一个可选的布尔值。将此设置为
true相当于在命令行上传递:option:--debug-output <cmake --debug-output>。尝试编译一个可选的布尔值。将此设置为
true相当于在命令行上传递:option:--debug-trycompile <cmake --debug-trycompile>。找到一个可选的布尔值。将此设置为
true相当于在命令行上传递:option:--debug-find <cmake --debug-find>。
构建预设¶
buildPresets 数组的每个条目都是一个 JSON 对象,可能包含以下字段:
名字表示预设的机器友好名称的必需字符串。此标识符用于 cmake --build --preset 选项。在同一目录中的
CMakePresets.json和CMakeUserPresets.json的联合中不能有两个同名的构建预设。但是,构建预设可能与配置、测试、包或工作流预设具有相同的名称。隐藏一个可选的布尔值,指定是否应隐藏预设。如果预设是隐藏的,则不能在
--preset参数中使用,并且不必具有有效的configurePreset,即使是继承。hidden预设旨在用作其他预设通过inherits字段继承的基础。继承一个可选的字符串数组,表示要继承的预设的名称。该字段也可以是字符串,相当于一个包含一个字符串的数组。
默认情况下,预设将继承“inherits”预设中的所有字段(“name”、“hidden”、“inherits”、“description”和“displayName”除外) ), 但可以根据需要覆盖它们。如果多个
inherits预设为同一字段提供冲突的值,则inherits数组中较早的预设将是首选。预设只能继承自同一文件或它包含的其中一个文件(直接或间接)中定义的另一个预设。
CMakePresets.json中的预设可能不会继承自CMakeUserPresets.json中的预设。条件一个可选的“条件”对象。这在指定版本“3”或更高版本的预设文件中是允许的。
供应商包含供应商特定信息的可选映射。 CMake 不解释此字段的内容,除非它是一个映射(如果它确实存在)。但是,它应该遵循与根级“vendor”字段相同的约定。如果供应商使用他们自己的预设“vendor”字段,他们应该在适当的时候以合理的方式实现继承。
显示名称带有人性化预设名称的可选字符串。
描述一个可选的字符串,带有对预设的人性化描述。
环境环境变量的可选映射。键是变量名(可能不是空字符串),值是“null”或表示变量值的字符串。无论进程环境是否给它赋值,每个变量都会被设置。该字段支持宏扩展,该映射中的环境变量可以相互引用,并且可以以任意顺序列出,只要这样的引用不会导致循环(例如,如果
ENV_1是$env {ENV_2},ENV_2可能不是``$env{ENV_1}``。)环境变量通过
inherits字段继承,预设的环境将是它自己的environment和来自它所有父级的environment的联合。如果此联合中的多个预设定义相同的变量,则应用“继承”的标准规则。将变量设置为“null”会导致它不被设置,即使值是从另一个预设继承的。备注
对于使用具有 ExternalProject 所需环境变量的配置预设的 ExternalProject 的 CMake 项目,请使用继承该配置预设的构建预设,否则 ExternalProject 将不会在配置预设中设置环境变量。示例:假设主机默认使用一个编译器(比如 Clang),而用户希望使用另一个编译器(比如 GCC)。设置配置预设环境变量
CC和CXX并使用继承该配置预设的构建预设。否则,ExternalProject 可能会使用与顶级 CMake 项目不同的(系统默认)编译器。配置预设一个可选的字符串,指定与此构建预设关联的配置预设的名称。如果未指定
configurePreset,则它必须从 inherits 预设继承(除非此预设被隐藏)。构建目录是从配置预设中推断出来的,因此构建将在与配置相同的binaryDir中进行。继承配置环境默认为 true 的可选布尔值。如果为 true,则关联配置预设中的环境变量将在所有继承的构建预设环境之后继承,但在此构建预设中明确指定的环境变量之前。
工作一个可选的整数。相当于在命令行上传递
--parallel或-j。目标一个可选的字符串或字符串数组。相当于在命令行上传递:option:--target <cmake--build --target> 或
-t。供应商可能会忽略目标属性或隐藏明确指定目标的构建预设。该字段支持宏扩展。配置一个可选的字符串。相当于在命令行上传递
--config。cleanFirst一个可选的布尔值。如果为真,相当于在命令行上传递:option:--clean-first <cmake--build --clean-first>。
resolvePackageReferences一个可选的字符串,指定包解析模式。这在指定版本“4”或更高版本的预设文件中是允许的。
包引用用于定义对来自外部包管理器的包的依赖性。目前仅支持与 Visual Studio 生成器结合使用的 NuGet。如果没有定义包引用的目标,则此选项不执行任何操作。有效值为:
在在尝试构建之前导致包引用被解析。
关闭包引用将不会被解析。请注意,这可能会导致某些构建环境出现错误,例如 .NET SDK 样式项目。
只有仅解析包引用,但不执行构建。
备注
命令行参数:option:--resolve-package-references <cmake--build --resolve-package-references> 将优先于此设置。如果未提供命令行参数且未指定此设置,则将评估特定于环境的缓存变量以决定是否应执行包恢复。
使用 Visual Studio 生成器时,包引用是使用
VS_PACKAGE_REFERENCES属性定义的。使用 NuGet 恢复包引用。可以通过将“CMAKE_VS_NUGET_PACKAGE_RESTORE”变量设置为“OFF”来禁用它。这也可以在配置预设中完成。冗长一个可选的布尔值。如果为真,相当于在命令行上传递
--verbose。nativeToolOptions一个可选的字符串数组。相当于在命令行的``--`` 之后传递选项。数组值支持宏扩展。
测试预设¶
testPresets 数组的每个条目都是一个 JSON 对象,可能包含以下字段:
名字表示预设的机器友好名称的必需字符串。此标识符用于
ctest --preset选项。CMakePresets.json和``CMakeUserPresets.json`` 的并集不能有两个同名的同名测试预设。但是,测试预设可能与配置、构建、包或工作流预设具有相同的名称。隐藏一个可选的布尔值,指定是否应隐藏预设。如果预设是隐藏的,则不能在
--preset参数中使用,并且不必具有有效的``configurePreset``,即使是继承。hidden预设旨在用作其他预设通过inherits字段继承的基础。继承一个可选的字符串数组,表示要继承的预设的名称。该字段也可以是字符串,相当于一个包含一个字符串的数组。
默认情况下,预设将继承“inherits”预设中的所有字段(“name”、“hidden”、“inherits”、“description”和“displayName”除外) ), 但可以根据需要覆盖它们。如果多个
inherits预设为同一字段提供冲突的值,则inherits数组中较早的预设将是首选。预设只能继承自同一文件或它包含的其中一个文件(直接或间接)中定义的另一个预设。
CMakePresets.json中的预设可能不会继承自CMakeUserPresets.json中的预设。条件一个可选的“条件”对象。这在指定版本“3”或更高版本的预设文件中是允许的。
供应商包含供应商特定信息的可选映射。 CMake 不解释此字段的内容,除非它是一个映射(如果它确实存在)。但是,它应该遵循与根级“vendor”字段相同的约定。如果供应商使用他们自己的预设“vendor”字段,他们应该在适当的时候以合理的方式实现继承。
显示名称带有人性化预设名称的可选字符串。
描述一个可选的字符串,带有对预设的人性化描述。
环境环境变量的可选映射。键是变量名(可能不是空字符串),值是“null”或表示变量值的字符串。无论进程环境是否给它赋值,每个变量都会被设置。该字段支持宏扩展,该映射中的环境变量可以相互引用,并且可以以任意顺序列出,只要这样的引用不会导致循环(例如,如果
ENV_1是$env {ENV_2},ENV_2可能不是``$env{ENV_1}``。)环境变量通过
inherits字段继承,预设的环境将是它自己的environment和来自它所有父级的environment的联合。如果此联合中的多个预设定义相同的变量,则应用“继承”的标准规则。将变量设置为“null”会导致它不被设置,即使值是从另一个预设继承的。配置预设一个可选的字符串,指定与此测试预设关联的配置预设的名称。如果未指定
configurePreset,则它必须从 inherits 预设继承(除非此预设被隐藏)。构建目录是从配置预设中推断出来的,因此测试将在与配置和构建相同的binaryDir中运行。继承配置环境默认为 true 的可选布尔值。如果为真,则关联配置预设中的环境变量将在所有继承的测试预设环境之后继承,但在此测试预设中明确指定的环境变量之前。
配置一个可选的字符串。相当于在命令行上传递
--build-config。覆盖配置文件一个可选的配置选项数组,用于覆盖 CTest 配置文件中指定的选项。相当于为数组中的每个值传递
--overwrite。数组值支持宏扩展。输出指定输出选项的可选对象。该对象可能包含以下字段。
shortProgress一个可选的布尔值。如果为真,相当于在命令行上传递:option:--progress <ctest --progress>。
冗长指定详细级别的可选字符串。必须是以下之一:
默认相当于在命令行上不传递详细信息标志。
冗长相当于在命令行上传递
--verbose。额外的相当于在命令行上传递:option:--extra-verbose <ctest --extra-verbose>。
调试一个可选的布尔值。如果为真,相当于在命令行上传递
--debug。outputOnFailure一个可选的布尔值。如果为真,相当于在命令行上传递:option:--output-on-failure <ctest --output-on-failure>。
安静一个可选的布尔值。如果为真,相当于在命令行上传递
--quiet。输出日志文件一个可选的字符串,指定日志文件的路径。相当于在命令行上传递:option:--output-log <ctest --output-log>。该字段支持宏扩展。
outputJUnitFile指定 JUnit 文件路径的可选字符串。相当于在命令行上传递:option:--output-junit <ctest --output-junit>。该字段支持宏扩展。这在指定版本“6”或更高版本的预设文件中是允许的。
标签摘要一个可选的布尔值。如果为假,相当于在命令行上传递:option:--no-label-summary <ctest --no-label-summary>。
子项目摘要一个可选的布尔值。如果为 false,相当于在命令行上传递:option:--no-subproject-summary <ctest --no-subproject-summary>。
maxPassedTestOutputSize一个可选的整数,以字节为单位指定通过测试的最大输出。相当于在命令行上传递:option:--test-output-size-passed <ctest --test-output-size-passed>。
maxFailedTestOutputSize一个可选的整数,以字节为单位指定失败测试的最大输出。相当于在命令行上传递:option:--test-output-size-failed <ctest --test-output-size-failed>。
testOutputTruncation指定测试输出截断模式的可选字符串。相当于在命令行上传递:option:--test-output-truncation <ctest --test-output-truncation>。这在指定版本“5”或更高版本的预设文件中是允许的。
maxTestNameWidth一个可选的整数,指定要输出的测试名称的最大宽度。相当于在命令行上传递
--max-width。
过滤器一个可选对象,指定如何过滤要运行的测试。该对象可能包含以下字段。
包括一个可选对象,指定要包含的测试。该对象可能包含以下字段。
名字一个可选的字符串,指定测试名称的正则表达式。相当于在命令行上传递:option:--tests-regex <ctest --tests-regex>。该字段支持宏扩展。 CMake 正则表达式语法在 string(REGEX) 下描述。
标签一个可选的字符串,指定测试标签的正则表达式。相当于在命令行上传递:option:--label-regex <ctest --label-regex>。该字段支持宏扩展。
使用联合一个可选的布尔值。相当于在命令行上传递
--union。索引一个可选对象,指定要按测试索引包含的测试。该对象可能包含以下字段。也可以是一个可选的字符串,指定一个文件,其命令行语法为:option:--tests-information <ctest --tests-information>。如果指定为字符串,则该字段支持宏扩展。
开始一个可选的整数,指定开始测试的测试索引。
结束一个可选的整数,指定要停止测试的测试索引。
大步走指定增量的可选整数。
具体测试一个可选的整数数组,指定要运行的特定测试索引。
排除一个可选对象,指定要排除的测试。该对象可能包含以下字段。
名字一个可选的字符串,指定测试名称的正则表达式。相当于在命令行上传递:option:--exclude-regex <ctest --exclude-regex>。该字段支持宏扩展。
标签一个可选的字符串,指定测试标签的正则表达式。相当于在命令行上传递:option:--label-exclude <ctest --label-exclude>。该字段支持宏扩展。
固定装置一个可选对象,指定要从添加测试中排除的固定装置。该对象可能包含以下字段。
任何一个可选的字符串,指定要从添加任何测试中排除的文本装置的正则表达式。相当于命令行上的:option:--fixture-exclude-any <ctest --fixture-exclude-any>。该字段支持宏扩展。
设置一个可选的字符串,指定要从添加设置测试中排除的文本装置的正则表达式。相当于命令行上的:option:--fixture-exclude-setup <ctest --fixture-exclude-setup>。该字段支持宏扩展。
清理一个可选的字符串,指定要从添加清理测试中排除的文本装置的正则表达式。相当于命令行上的:option:--fixture-exclude-cleanup <ctest --fixture-exclude-cleanup>。该字段支持宏扩展。
执行指定测试执行选项的可选对象。该对象可能包含以下字段。
stopOnFailure一个可选的布尔值。如果为真,相当于在命令行上传递:option:--stop-on-failure <ctest --stop-on-failure>。
启用故障转移一个可选的布尔值。如果为真,相当于在命令行上传递:option:-F <ctest -F>。
工作一个可选的整数。相当于在命令行上传递
--parallel。resourceSpecFile一个可选的字符串。相当于在命令行上传递:option:--resource-spec-file <ctest --resource-spec-file>。该字段支持宏扩展。
测试负载一个可选的整数。相当于在命令行上传递:option:--test-load <ctest --test-load>。
仅显示一个可选的字符串。相当于在命令行上传递:option:--show-only <ctest --show-only>。该字符串必须是以下值之一:
人类json-v1重复一个可选对象,指定如何重复测试。相当于在命令行上传递
--repeat。该对象必须具有以下字段。模式必需的字符串。必须是以下值之一:
直到失败直到通过超时后计数必需的整数。
交互式调试一个可选的布尔值。如果为真,相当于在命令行上传递:option:--interactive-debug-mode 1 <ctest --interactive-debug-mode>。如果为 false,相当于在命令行上传递
--interactive-debug-mode 0。scheduleRandom一个可选的布尔值。如果为真,相当于在命令行上传递:option:--schedule-random <ctest --schedule-random>。
超时一个可选的整数。相当于在命令行上传递
--timeout。noTestsAction如果没有找到测试,则指定行为的可选字符串。必须是以下值之一:
默认相当于在命令行不传递任何值。
错误相当于在命令行上传递
--no-tests=error。忽略相当于在命令行上传递
--no-tests=ignore。
包预设¶
包预设可以在模式版本 6 或更高版本中使用。 packagePresets 数组的每个条目都是一个 JSON 对象,可能包含以下字段:
名字表示预设的机器友好名称的必需字符串。此标识符用于
cpack --preset选项。CMakePresets.json和CMakeUserPresets.json的并集在同一目录中不能有两个同名的包预设。但是,包预设可能与配置、构建、测试或工作流预设具有相同的名称。隐藏一个可选的布尔值,指定是否应隐藏预设。如果预设是隐藏的,它不能在
--preset参数中使用,并且不必具有有效的``configurePreset``,即使是继承。hidden预设旨在用作其他预设通过inherits字段继承的基础。继承一个可选的字符串数组,表示要继承的预设的名称。该字段也可以是字符串,相当于一个包含一个字符串的数组。
默认情况下,预设将继承“inherits”预设中的所有字段(“name”、“hidden”、“inherits”、“description”和“displayName”除外) ), 但可以根据需要覆盖它们。如果多个
inherits预设为同一字段提供冲突的值,则inherits数组中较早的预设将是首选。预设只能继承自同一文件或它包含的其中一个文件(直接或间接)中定义的另一个预设。
CMakePresets.json中的预设可能不会继承自CMakeUserPresets.json中的预设。条件一个可选的“条件”对象。
供应商包含供应商特定信息的可选映射。 CMake 不解释此字段的内容,除非它是一个映射(如果它确实存在)。但是,它应该遵循与根级“vendor”字段相同的约定。如果供应商使用他们自己的预设“vendor”字段,他们应该在适当的时候以合理的方式实现继承。
显示名称带有人性化预设名称的可选字符串。
描述一个可选的字符串,带有对预设的人性化描述。
环境环境变量的可选映射。键是变量名(可能不是空字符串),值是“null”或表示变量值的字符串。无论进程环境是否给它赋值,每个变量都会被设置。该字段支持宏扩展,该映射中的环境变量可以相互引用,并且可以以任意顺序列出,只要这样的引用不会导致循环(例如,如果
ENV_1是$env {ENV_2},ENV_2可能不是``$env{ENV_1}``。)环境变量通过
inherits字段继承,预设的环境将是它自己的environment和来自它所有父级的environment的联合。如果此联合中的多个预设定义相同的变量,则应用“继承”的标准规则。将变量设置为“null”会导致它不被设置,即使值是从另一个预设继承的。配置预设一个可选字符串,指定与此包预设关联的配置预设的名称。如果未指定
configurePreset,则它必须从 inherits 预设继承(除非此预设被隐藏)。构建目录是从配置预设中推断出来的,因此打包将在与配置和构建相同的binaryDir中运行。继承配置环境默认为 true 的可选布尔值。如果为 true,则关联配置预设中的环境变量将在所有继承的包预设环境之后继承,但在此包预设中明确指定的环境变量之前继承。
生成器一个可选的字符串数组,表示要使用的 CPack 生成器。
配置一个可选的字符串数组,表示要打包的 CPack 的构建配置。
变量要传递给 CPack 的可选变量映射,相当于:option:-D <cpack -D> 参数。每个键是一个变量的名称,值是分配给该变量的字符串。
配置文件一个可选字符串,表示要使用的 CPack 配置文件。
输出指定输出选项的可选对象。有效键是:
调试一个可选的布尔值,指定是否打印调试信息。
true的值相当于在命令行上传递:option:--debug <cpack --debug>。冗长一个可选的布尔值,指定是否详细打印。
true的值相当于在命令行上传递:option:--verbose <cpack --verbose>。
包名表示包名称的可选字符串。
包版本表示包版本的可选字符串。
包目录一个可选字符串,表示放置包的目录。
供应商名称表示供应商名称的可选字符串。
工作流程预设¶
工作流预设可以在架构版本“6”或更高版本中使用。 workflowPresets 数组的每个条目都是一个 JSON 对象,可能包含以下字段:
名字表示预设的机器友好名称的必需字符串。此标识符用于 cmake --workflow --preset 选项。
CMakePresets.json和``CMakeUserPresets.json`` 的并集在同一目录下不能有两个同名的工作流预设。但是,工作流预设可能与配置、构建、测试或包预设具有相同的名称。显示名称带有人性化预设名称的可选字符串。
描述一个可选的字符串,带有对预设的人性化描述。
步骤描述工作流步骤的必需对象数组。第一步必须是配置预设,所有后续步骤必须是非配置预设,其“configurePreset”字段与起始配置预设匹配。每个对象可能包含以下字段:
类型必需的字符串。第一步必须是“配置”。后续步骤必须是
build、test或package。名字一个必需的字符串,表示作为此工作流步骤运行的配置、构建、测试或包预设的名称。
健康)状况¶
预设的“条件”字段允许在指定版本“3”或更高版本的预设文件中使用,用于确定是否启用预设。例如,这可用于在 Windows 以外的平台上禁用预设。 condition 可以是布尔值、null 或对象。如果它是布尔值,则布尔值指示预设是启用还是禁用。如果为“null”,则启用预设,但“null”条件不会被任何可能从预设继承的预设继承。子条件(例如在 not、anyOf 或 allOf 条件中)可能不是 null。如果它是一个对象,它有以下字段:
类型具有以下值之一的必需字符串:
“常量”表示条件不变。这相当于使用布尔值代替对象。条件对象将具有以下附加字段:
价值一个必需的布尔值,它为条件的评估提供一个常量值。
“等于”“不等于”表示条件比较两个字符串,看它们是否相等(或不相等)。条件对象将具有以下附加字段:
lhs要比较的第一个字符串。该字段支持宏扩展。
右手边要比较的第二个字符串。该字段支持宏扩展。
“在列表中”“notInList”指示条件在字符串列表中搜索字符串。条件对象将具有以下附加字段:
字符串要搜索的必需字符串。该字段支持宏扩展。
列表要搜索的必需字符串数组。该字段支持宏扩展,并使用短路评估。
“匹配”“不匹配”表示条件在字符串中搜索正则表达式。条件对象将具有以下附加字段:
字符串要搜索的必需字符串。该字段支持宏扩展。
正则表达式要搜索的必需正则表达式。该字段支持宏扩展。
“任何”“全部”指示该条件是零个或多个嵌套条件的聚合。条件对象将具有以下附加字段:
条件必需的条件对象数组。这些条件使用短路评估。
“不是”表示该条件是另一个条件的反转。条件对象将具有以下附加字段:
条件必需的条件对象。
宏扩展¶
上面说了一些字段支持宏扩展。宏以 $<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}在预设的“名称”字段中指定的名称。
${生成器}在预设的“generator”字段中指定的生成器。对于构建和测试预设,这将评估由
configurePreset指定的生成器。${hostSystemName}主机操作系统的名称。包含与 CMAKE_HOST_SYSTEM_NAME 相同的值。这在指定版本“3”或更高版本的预设文件中是允许的。
${fileDir}包含宏的预设文件的目录路径。这在指定版本“4”或更高版本的预设文件中是允许的。
${美元}文字美元符号 (
$)。${pathListSep}用于分隔路径列表的本机字符,例如
:或;。例如,通过将
PATH设置为/path/to/ninja/bin${pathListSep}$env{PATH},${pathListSep}将扩展为底层操作系统使用的字符在PATH中连接。这在指定版本“5”或更高版本的预设文件中是允许的。
$env{<变量名>}名称为“<variable-name>”的环境变量。变量名不能为空字符串。如果变量是在
environment字段中定义的,则使用该值而不是父环境中的值。如果未定义环境变量,则此值为空字符串。请注意,虽然 Windows 环境变量名称不区分大小写,但预设中的变量名称仍然区分大小写。当使用不一致的大小写时,这可能会导致意想不到的结果。为获得最佳结果,请使环境变量名称的大小写保持一致。
$penv{<变量名>}与
$env{<variable-name>}类似,除了该值仅来自父环境,而不是来自environment字段。这允许您将值添加到现有环境变量中。例如,将PATH设置为/path/to/ninja/bin:$penv{PATH}会将/path/to/ninja/bin添加到PATH环境中变量。这是必需的,因为$env{<variable-name>}不允许循环引用。$供应商{<宏名称>}供应商插入自己的宏的扩展点。 CMake 将无法使用具有
$vendor{<macro-name>}宏的预设,并有效地忽略此类预设。但是,它仍然可以使用同一文件中的其他预设。CMake 不会尝试解释
$vendor{<macro-name>}宏。但是,为了避免名称冲突,IDE 供应商应该在<macro-name>前加上一个非常短(最好 <= 4 个字符)的供应商标识符前缀,然后是.,然后是宏名称。例如,示例 IDE 可以有$vendor{xide.ideInstallDir}。
图式¶
此文件 为 CMakePresets.json 格式提供机器可读的 JSON 模式。