存在一些项目有一些预设的编译配置,可以在项目根目录中添加CMakePresets.json文件进行相关配置;
CMakePresets.json文件一般包含:
name:预设的名称。
displayName:预设的显示名称。
description:预设的描述。
generator:指定生成器(例如 “Unix Makefiles”、“Ninja” 等)。
configuration:指定构建类型(例如 “Debug”、“Release” 等)。
cacheVariables:定义缓存变量。
env:定义环境变量。
sourceDir:项目源代码目录。
binaryDir:构建输出目录。
buildFlags:编译时使用的额外标志。
toolchainFile:工具链文件的路径。
inherits:继承(重用配置,相同的覆盖)的配置项名称
下面是一个简单的CMakePreset.json文件,基于此分别说明相关关键字含义
{
"version": 0,
"configurePresets": [
{
"name": "windows-base",
"description": "Basic configurations for Windows platform",
"hidden": true,
"binaryDir": "${sourceDir}/build/out/${presetName}",
"installDir": "${sourceDir}/build/sdk",
"cacheVariables": {
"Tools_ROOT": "${sourceDir}/cmake/Tools",
"Qt5_ROOT": "$env{QT5_x64}"
},
"condition": {
"type": "equals",
"lhs": "${hostSystemName}",
"rhs": "Windows"
}
},
{
"name": "vs2022-base",
"description": "Visual Studio 17 2022 vc15 build For Windows amd64(Debug)",
"hidden": true,
"inherits": "windows-base",
"generator": "Visual Studio 17 2022",
"architecture": {
"strategy": "set",
"value": "x64"
},
"toolset": {
"strategy": "set",
"value": "v141,host=x64"
}
},
{
"name": "debug-base",
"description": "Debug Configuration",
"hidden": true,
"cacheVariables": {
"CMAKE_BUILD_TYPE": "Debug"
}
},
{
"name": "vs2022-debug",
"displayName": "Debug(VS2022)",
"description": "Visual Studio build For Windows amd64(Debug)",
"inherits": [
"vs2022-base",
"debug-base"
]
},
"buildPresets": [
{
"name": "vs2022-debug",
"displayName": "VS2022 Debug",
"configurePreset": "vs2022-debug",
"configuration": "Debug"
}
]
}
文件中首先是“version”,可以用来迭代区分内容
其次是configurePresets,可以用来与buildPresets区分,主要用来设置相关cmake的构建配置内容,而buildPresets可以用来设置生成内容。
在configurePresets中,name是用来说明配置的命名,用来在后续cmake命令行中中可以通过–preset=name来选择使用何种配置;
hidden使用可以设置是否隐藏,如果隐藏了,则不能在参数中使用,例如在cmake命令行中用–preset对于隐藏的name则不能使用;
cacheVariables中可以定义一些CMakelists.txt中的变量,可以理解成在cmake命令行加入-DQt5_ROOT=XXX(说明Qt5_ROOT变量的内容),也可以理解成cmakelists.txt中set命令;文件中用了$env{QT5_x64}说明,它的实际内容是环境变量中QT5_x64的内容;
condition中则是判断指定版本或者更好版本的预设文件是否启用该预设,比如上述中的内容,type:equals则表示条件是比较两个字符串查看是否相等,lhs则是比较的第一个字符串,rhs则是第二字符串;
inherits表示继承,例如inherits:a,则表示当前name的配置项是在name为a的配置项基础上加一些改动;
generator则表示对应的生成器,这里用的是2022,则选择对应的msvc 2022内容;
architecture与toolset
strategy中是set表示用来设置,value则表示对应的值
大致关键字都差不多了,然后上述文件中,vs2022-debug继承于vs2022-base与debug-base,同时没有设置为hidden,因此在cmake命令行中可以通过–preset=vs2022-debug来进行选择该预设项
也可以在vscode软件中使用cmaketool插件进行选择相关预设项来进行编译
这里如果有没有讲明白的可以参考相关文档,链接放在下面,这里只是增加一些个人的理解,方便大家理解,也方便自己后续回忆(笑)
https://cmake.org/cmake/help/v3.24/manual/cmake-presets.7.html#
https://learn.microsoft.com/zh-cn/cpp/build/cmake-presets-vs?view=msvc-170