当我在 CMake 项目中单击“管理配置...”时,Visual Studio 为我生成了以下 CMakePresets.json:
{
"version": 3,
"configurePresets": [
{
"name": "windows-base",
"description": "Target Windows with the Visual Studio development environment.",
"hidden": true,
"generator": "Ninja",
"binaryDir": "${sourceDir}/out/build/${presetName}",
"installDir": "${sourceDir}/out/install/${presetName}",
"cacheVariables": {
"CMAKE_C_COMPILER": "cl.exe",
"CMAKE_CXX_COMPILER": "cl.exe"
},
"condition": {
"type": "equals",
"lhs": "${hostSystemName}",
"rhs": "Windows"
}
},
{
"name": "x64-debug",
"displayName": "x64 Debug",
"description": "Target Windows (64-bit) with the Visual Studio development environment. (Debug)",
"inherits": "windows-base",
"architecture": {
"value": "x64",
"strategy": "external"
},
"cacheVariables": { "CMAKE_BUILD_TYPE": "Debug" }
},
{
"name": "x64-release",
"displayName": "x64 Release",
"description": "Target Windows (64-bit) with the Visual Studio development environment. (RelWithDebInfo)",
"inherits": "x64-debug",
"cacheVariables": { "CMAKE_BUILD_TYPE": "Release" }
},
{
"name": "x86-debug",
"displayName": "x86 Debug",
"description": "Target Windows (32-bit) with the Visual Studio development environment. (Debug)",
"inherits": "windows-base",
"architecture": {
"value": "x86",
"strategy": "external"
},
"cacheVariables": { "CMAKE_BUILD_TYPE": "Debug" }
},
{
"name": "x86-release",
"displayName": "x86 Release",
"description": "Target Windows (32-bit) with the Visual Studio development environment. (RelWithDebInfo)",
"inherits": "x86-debug",
"cacheVariables": { "CMAKE_BUILD_TYPE": "Release" }
}
]
}
我对 cmake install 前缀感兴趣,它是通过该installDir
字段设置的。这很好,因为结果目录将间接包含处理器名称“x64”,因为预设名称包含处理器。
但处理器名称是硬编码的,即它是字符串文字的一部分,例如"x64-debug"
,在各种预设名称中。是否可以在 CMakePresets.json 中将处理器引用为变量(或宏扩展)?CMAKE_SYSTEM_PROCESSOR
即类似于CMakeLists.txt 中可用的缓存变量的东西?
不它不是。可用宏的完整列表可以在这里找到。
目前仅限于
${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 个字符)的供应商标识符前缀,后跟.
,然后是宏名称。例如,示例 IDE 可能具有$vendor{xide.ideInstallDir}
.