首页 > 其他分享 >简单的CMakePresets.json解析 -- configurePresets

简单的CMakePresets.json解析 -- configurePresets

时间:2023-04-05 11:47:01浏览次数:46  
标签:cacheVariables CMAKE name -- CMakePresets json Debug sourceDir

---- CMake官方文档 -----

CMakeLists.txt 是通用的c++项目管理文件,

在不同的设备中,环境变量,编译器等都可能不同,

将这些设置都交给CMakeLists.txt , 并不是一个好办法。

为了降低CMakeLists.txt的臃肿程度,简化其判断,

可以针对不同设备,配置不同的CMakePresets.json.

使得项目可以在不同的设备上运行、测试。

 

一个由visual studio 2022 自动生成的CMakePresets.json,稍稍修改了一下。

{
    "version": 3,
    "configurePresets": [
      {
        "name": "windows-base",
        "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"
        },
        "environment": {
          "MY_ENVIRONMENT_VARIABLE": "Test"          
        },
        "condition": {
          "type": "equals",
          "lhs": "${hostSystemName}",
          "rhs": "Windows"
        }
      },
        {
            "name": "x64-debug",
            "displayName": "x64 Debug",
            "inherits": "windows-base",
            "architecture": {
                "value": "x64",
                "strategy": "external"
            },
            "cacheVariables": {
                "CMAKE_BUILD_TYPE": "Debug"
            }
        },
        {
            "name": "x64-release",
            "displayName": "x64 Release",
            "inherits": "x64-debug",
            "cacheVariables": {
                "CMAKE_BUILD_TYPE": "Release"
            }
        },
        {
            "name": "x86-debug",
            "displayName": "x86 Debug",
            "inherits": "windows-base",
            "architecture": {
                "value": "x86",
                "strategy": "external"
            },
            "cacheVariables": {
                "CMAKE_BUILD_TYPE": "Debug"
            }
        },
        {
            "name": "x86-release",
            "displayName": "x86 Release",
            "inherits": "x86-debug",
            "cacheVariables": {
                "CMAKE_BUILD_TYPE": "Release"
            }
        },
        {
            "name": "linux-debug",
            "displayName": "Linux Debug",
            "generator": "Ninja",
            "binaryDir": "${sourceDir}/out/build/${presetName}",
            "installDir": "${sourceDir}/out/install/${presetName}",
            "cacheVariables": {
                "CMAKE_BUILD_TYPE": "Debug"
            },
            "condition": {
                "type": "equals",
                "lhs": "${hostSystemName}",
                "rhs": "Linux"
            },
            "vendor": {
                "microsoft.com/VisualStudioRemoteSettings/CMake/1.0": {
                    "sourceDir": "$env{HOME}/.vs/$ms{projectDirName}"
                }
            }
        },
        {
            "name": "macos-debug",
            "displayName": "macOS Debug",
            "generator": "Ninja",
            "binaryDir": "${sourceDir}/out/build/${presetName}",
            "installDir": "${sourceDir}/out/install/${presetName}",
            "cacheVariables": {
                "CMAKE_BUILD_TYPE": "Debug"
            },
            "condition": {
                "type": "equals",
                "lhs": "${hostSystemName}",
                "rhs": "Darwin"
            },
            "vendor": {
                "microsoft.com/VisualStudioRemoteSettings/CMake/1.0": {
                    "sourceDir": "$env{HOME}/.vs/$ms{projectDirName}"
                }
            }
        }
    ]
}

configurePresets 是一个 json 字段 []。

里面包含多个 设置, 这些设置有属性:name, hidden, generator,binaryDir, installDir .... 等组成。

后面的设置可以继承前面的设置。Visual Studio IDE根据选择的编译模式,自动从这里找到对应的配置名。

其中字段:cacheVariables 中的字段可以在 cmakelists中使用。

也可以像下面方法定义:

 

      "cacheVariables": {
        "FIRST_CACHE_VARIABLE": {
          "type": "BOOL",
          "value": "OFF"
        },
        "SECOND_CACHE_VARIABLE": "ON"
      },

environment 可以定义环境变量,上文例子中的引用方法:

$ENV{MY_ENVIRONMENT_VARIABLE}

除了这个配置,还可以配置:buildPresets, testPresets

  "buildPresets": [
    {
      "name": "default",
      "configurePreset": "default"
    }
  ],
  "testPresets": [
    {
      "name": "default",
      "configurePreset": "default",
      "output": {"outputOnFailure": true},
      "execution": {"noTestsAction": "error", "stopOnFailure": true}
    }
  ],

也可以包含其他json配置。

  "include": [
    "otherThings.json",
    "moreThings.json"
  ],

 

标签:cacheVariables,CMAKE,name,--,CMakePresets,json,Debug,sourceDir
From: https://www.cnblogs.com/kingkaixuan/p/17289047.html

相关文章

  • 【openwrt】获取设备的IMEI
    随身wifi刷了openwrt的固件,如何查询IMEIroot@HandsomeMod:~#mmcli-L/org/freedesktop/ModemManager1/Modem/0[1]0root@HandsomeMod:~#mmcli-m0-----------------------------------General|path:/org/freedesktop/ModemManager1......
  • 6·2HTTPS协议概述|6·32HTTPS使用成本|6·42HTTPS对性能的影响|6·52HTTPS常见问题
    HTTPS可以认为是HTTPS+TLSTLS是传输层加密协议,它的前身是SSL协议HTTPS功能介绍 内容加密 非对称密钥交换 对称内容加密 身份认证 数字证书 数据完整性 HTTPS使用成本 证书费用以及更新维护 HT......
  • 通过阿里云ECS服务器公网ip访问tomcat,nginx
    一、概述1、操作系统:centos72、安装nginx方法:https://www.cnblogs.com/boonya/p/7907999.html,亲测可用。3、tomcat版本:apache-tomcat-7.0.92二、操作步骤1、启动tomcat;2、进入阿里云控制台,选择安全组,配置安全组规则(添加80,8080端口规则);    3、按图示配置完成,点击......
  • 使用benchmark比较分治法与归纳法求解最大子数组问题的性能
    #include<benchmark/benchmark.h>#include<algorithm>#include<deque>#include<functional>#include<iostream>#include<random>#include<string>#include<vector>usingnamespacestd;staticconstint......
  • 打破传统,大数据让旅游更智能——探秘旅游App的未来
    旅游作为一种消费行为,已经成为人们生活中不可或缺的一部分。而旅游App作为旅游行业中的新生代,正在迅速崛起,成为人们出行的必备工具。利用大数据技术,旅游App正在不断地打破传统,让旅游更加智能化。一、大数据技术为旅游App注入智能基因旅游App的智能化离不开大数据技术的支持。大......
  • Unity 字体研究
    在学习公司项目的时候看到有的字体定义了内容  和以前我看见其他人提出的问题,“热更框架之外,用到了字体文件,热更里也有使用字体文件,如何去重。”我对这个问题印象深刻,今天看见项目如此操作估计就是想解决这个问题利用字体压缩工具 https://github.com/forJrking/FontZip......
  • Chrome 112 发布,删除 Chrome Apps、支持 CSS 嵌套
    时隔一个月时间,Google正式发布了Chrome112版本,该版本删除了ChromeApps、支持CSS嵌套、改进了<dialog>等。ChromeApps过去,ChromeApps是一种被视为向用户提供轻量级网站体验的方式。然而,它们从未像浏览器扩展或标准网站那样大受欢迎。为了跟上时代的变化,改善用......
  • 蓝桥杯三天备考----枚举:卡片
    题目描述本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。小蓝有很多数字卡片,每张卡片上都是数字 0到 9。小蓝准备用这些卡片来拼一些数,他想从 1 开始拼出正整数,每拼一个,就保存起来,卡片就不能用来拼其它数了。小蓝想知道自己能从 1 拼到多少。例......
  • git 使用过程中遇到问题
    [email protected]:Permissiondenied(publickey).fatal:Couldnotreadfromremoterepository.这个是说没有拉取权限,这个时候,就需要配置ssh-key先配置好账户/项目的SSH公钥gitconfig--globaluser.name"用户名称" gitconfig--glo......
  • Qt 6.5 LTS 正式发布
    Qt6.5LTS已正式发布。此版本为图形和UI开发者以及应用程序后端引入了许多新功能,还包含许多修复和通用的改进。Qt6.5将成为商业许可证持有者的长期支持(LTS)版本。部分更新亮点:改进主题和样式使用Qt6.5,应用程序能够便捷地支持Windows的深色模式。在macOS......