cmake --preset使用 CMakePresets

存在一些项目有一些预设的编译配置,可以在项目根目录中添加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

  • 17
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值