VS中cmake多配置构建设置

news2024/11/26 14:43:19

一.cmake在vs中的使用简介

CMake 是一种跨平台开源工具,用于定义在多个平台上运行的生成过程。

Visual Studio C 和 C++ 开发不再仅适用于 Windows。 本教程介绍如何在 Windows 和 Linux 上使用 Visual Studio C++ 进行跨平台开发。 由于它基于 CMake,无需创建或生成 Visual Studio 项目。 打开包含 CMakeLists.txt 文件的文件夹时,Visual Studio 会自动配置 IntelliSense 并生成设置。 可以快速开始在 Windows 上本地编辑、生成和调试代码。 然后,切换配置,在 Linux 上执行相同的操作,所有这些操作都从 Visual Studio 中进行。

针对常见的开源项目,遵循以下步骤,可以快速在本地IDE VS中生成可以调试的项目代码

  • 从 GitHub 克隆一个开源 CMake 项目(或者下载到本地的项目源代码)
  • 在 Visual Studio 中打开项目(打开包含 CMakeLists.txt 文件的文件夹)
  • 在 Windows 上生成和调试可执行目标
  • 添加与 Linux 计算机的连接
  • 在 Linux 上生成和调试相同的目标

二.一个在vs下cmake配置的项目包含的文件

1.CMakeLists.txt

  包含在项目源码根目录的CMakeLists.txt与包含在单个项目文件夹中的CMakeLists.txt

2.CMakeSettings.json

vs对cmake的配置,可以方便的修改里面的属性字段达到预想的vs项目配置

三.在CMakeSettings.json中配置实现cmake多配置构建设置

单配置构建输出效果:

只有一个debug,无法切换

多配置构建输出效果:

同时包含Debug,MinSizeRel,Release,RelWithDebinfo四种支持的构建方式

"configurationType": "Debug;Release;RelWithDebInfo;MinSizeRel",

在configurationType字段设置四种支持的构建方式

如下编译kicad时的一个案例CMakeSettings.json

{
  "environments": [
    {
      "BuildDir": "${workspaceRoot}\\build",
      "InstallDir": "${workspaceRoot}\\build\\install"
    },
    {
      "environment": "vcpkg",
      "VcPkgDir": "E:/vs2022/Projects/vcpkg"
    },
    {
      "environment": "mingw_64",
      "MINGW64_ROOT": "D:/msys64/mingw64",
      "BIN_ROOT": "${env.MINGW64_ROOT}/bin",
      "FLAVOR": "x86_64-w64-mingw32",
      "TOOLSET_VERSION": "10.2.0",
      "PATH": "${env.MINGW64_ROOT}/bin;${env.MINGW64_ROOT}/../usr/local/bin;${env.MINGW64_ROOT}/../usr/bin;${env.MINGW64_ROOT}/../bin;${env.PATH}",
      "INCLUDE": "${env.INCLUDE};${env.MINGW64_ROOT}/include/c++/${env.TOOLSET_VERSION};${env.MINGW64_ROOT}/include/c++/${env.TOOLSET_VERSION}/tr1;${env.MINGW64_ROOT}/include/c++/${env.TOOLSET_VERSION}/${env.FLAVOR}"
    }
  ],
  "configurations": [
    {
      "name": "x86-Debug",
      "generator": "Ninja",
      "configurationType": "Debug",
      "inheritEnvironments": [ "msvc_x86", "vcpkg" ],
      "buildRoot": "${env.BuildDir}\\${name}",
      "installRoot": "${env.InstallDir}\\${name}",
      "addressSanitizerEnabled": false,
      "cmakeCommandArgs": "",
      "buildCommandArgs": "-v",
      "ctestCommandArgs": "",
      "variables": [
        {
          "name": "KICAD_BUILD_QA_TESTS",
          "value": "False",
          "type": "BOOL"
        },
        {
          "name": "KICAD_WIN32_DPI_AWARE",
          "value": "ON",
          "type": "BOOL"
        }
      ],
      "cmakeToolchain": "${env.VcPkgDir}/scripts/buildsystems/vcpkg.cmake"
    },
    {
      "name": "x86-Release",
      "generator": "Ninja",
      "configurationType": "RelWithDebInfo",
      "inheritEnvironments": [ "msvc_x86", "vcpkg" ],
      "buildRoot": "${env.BuildDir}\\${name}",
      "installRoot": "${env.InstallDir}\\${name}",
      "cmakeCommandArgs": "",
      "buildCommandArgs": "-v",
      "ctestCommandArgs": "",
      "variables": [
        {
          "name": "KICAD_BUILD_QA_TESTS",
          "value": "False",
          "type": "BOOL"
        },
        {
          "name": "KICAD_WIN32_DPI_AWARE",
          "value": "ON",
          "type": "BOOL"
        }
      ],
      "cmakeToolchain": "${env.VcPkgDir}/scripts/buildsystems/vcpkg.cmake"
    },
    {
      "name": "x64-Debug",
      "generator": "Visual Studio 17 2022 Win64",
      "configurationType": "Debug;Release;RelWithDebInfo;MinSizeRel",
      "inheritEnvironments": [ "msvc_x64_x64", "vcpkg" ],
      "buildRoot": "${env.BuildDir}\\${name}",
      "installRoot": "${env.InstallDir}\\${name}",
      "cmakeCommandArgs": "-DSWIG_EXECUTABLE=E:/vs2022/Projects/vcpkg/swigwin-4.1.1/swig.exe",
      "buildCommandArgs": "-V",
      "ctestCommandArgs": "",
      "variables": [
        {
          "name": "KICAD_BUILD_QA_TESTS",
          "value": "False",
          "type": "BOOL"
        },
        {
          "name": "KICAD_WIN32_DPI_AWARE",
          "value": "ON",
          "type": "BOOL"
        }
      ],
      "cmakeToolchain": "${env.VcPkgDir}/scripts/buildsystems/vcpkg.cmake"
    },
    {
      "name": "x64-Release",
      "generator": "Visual Studio 17 2022 Win64",
      "configurationType": "RelWithDebInfo",
      "inheritEnvironments": [ "msvc_x64_x64", "vcpkg" ],
      "buildRoot": "${env.BuildDir}\\${name}",
      "installRoot": "${env.InstallDir}\\${name}",
      "cmakeCommandArgs": "-DSWIG_EXECUTABLE=E:/vs2022/Projects/vcpkg/swigwin-4.1.1/swig.exe",
      "buildCommandArgs": "-V",
      "ctestCommandArgs": "",
      "variables": [
        {
          "name": "KICAD_BUILD_QA_TESTS",
          "value": "False",
          "type": "BOOL"
        },
        {
          "name": "KICAD_WIN32_DPI_AWARE",
          "value": "ON",
          "type": "BOOL"
        }
      ],
      "cmakeToolchain": "${env.VcPkgDir}/scripts/buildsystems/vcpkg.cmake"
    },
    {
      "name": "MSYS2-x64-Debug",
      "generator": "Ninja",
      "configurationType": "Debug",
      "inheritEnvironments": [ "mingw_64" ],
      "buildRoot": "${env.BuildDir}\\${name}",
      "installRoot": "${env.InstallDir}\\${name}",
      "cmakeCommandArgs": "",
      "buildCommandArgs": "-v",
      "ctestCommandArgs": "",
      "intelliSenseMode": "linux-gcc-x64",
      "cmakeToolchain": "",
      "variables": [
        {
          "name": "CMAKE_C_COMPILER",
          "value": "${env.BIN_ROOT}/gcc.exe"
        },
        {
          "name": "CMAKE_CXX_COMPILER",
          "value": "${env.BIN_ROOT}/g++.exe"
        },
        {
          "name": "KICAD_BUILD_QA_TESTS",
          "value": "False",
          "type": "BOOL"
        },
        {
          "name": "KICAD_WIN32_DPI_AWARE",
          "value": "ON",
          "type": "BOOL"
        }
      ]
    }
  ]
}

参考资料:1.Visual Studio 中的 CMake 项目 | Microsoft Learn

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1029148.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

VR虚拟展厅——商业领域中不可或缺的工具

VR虚拟展厅已经逐渐在商业领域崭露头角,将实体展厅以三维、立体化的形式还原在线上,企业能够以更加直观、真实的方式展示自身的形象和产品,用户也得以通过VR虚拟展厅全方位了解产品详情,包括图片展示、视频介绍等,更加…

websocket php教程

WebSocket 是 HTML5 提供的一种网络通讯协议,用于服务端与客户端实时数据传输。广泛用于浏览器与服务器的实时通讯,APP与服务器的实时通讯等场景。 相比传统HTTP协议请求响应式通讯,WebSocket协议可以做到实时的双向通讯,服务端可…

Automation Anywhere推出新的生成式AI自动化平台,加速提高企业生产力

在9 月 19 日的Imagine 2023 大会上,智能自动化领域的领导者 Automation Anywhere 宣布对其自动化平台进行扩展。推出了新的 Responsible AI Layer,并宣布了四项关键产品更新,包括全新的 Autopilot,它可以利用生成式 AI &#xff…

IT隔离电源系统在医院电气设计中的应用

【摘要】许多国际标准都对医疗领域,尤其是那些生命攸关的场所,如手术室、重症监护室、心脏监护室等的配电系统作了特殊的规定。现在国际上针对医疗领域中的手术室、ICU、CCU等重要场所通常采用局部“中性点不接地的供电系统”(IEC标准称之为“…

webpack:详解代码分离以及插件SplitChunksPlugin的使用

文章目录 背景入口起点分离基本使用防重复 SplitChunksPlugin插件分离背景基本使用splitChunks.chunkssplitChunks.minChunkssplitChunks.minSizesplitChunks.maxSizesplitChunks.namesplitChunks.cacheGroupssplitChunks.cacheGroups.{cacheGroup}.prioritysplitChunks.cacheG…

智能制造,RFID与流转线碰撞

智能制造,RFID与流转线碰撞 RFID是一种无线通信技术,可以用于实时识别和物品。它通过将包含有信息的标签贴在物品上,利用射频信号进行通信,将物品的信息传输给读取器。读取器可以通过无线方式读取标签上的信息,从而实…

公众环境关注如何提升企业ESG表现(2011-2022年)

参照陶云清(2023)的做法,本团队对来自“科学学与科学技术管理”《公众环境关注如何提升企业ESG表现?—基于外部压力与内部关注的双重视角》一文中的基准回归部分进行复刻。 如何驱动企业在逐利过程中兼顾环境、社会和治理表现&am…

IC业务杂谈-----片内外设、片上外设 和、片外外设的区别

片内外设就是片上外设,同一种意思不同说法而已。 片内外设和片外外设的区别: 片内、外设是两个概念,片内指做成芯片的集成电路内部,简称片内,片外同理显而易见;外设是外部设备的简称,是指集成…

Direct3D融合技术

该技术能使我们将当前要进行光栅化的像素的颜色与先前已已光栅化并处于同一位置的像素的颜色进行合成,即将正在处理的图元颜色值与存储在后台缓存中的像素颜色值进行合成(混合),利用该技术我们可得到各种各样的效果,尤其是透明效果。 在融合…

根据经纬度数据画出船只航行路径图(cartopy + matplotlib)

问题: 已知穿航行的经纬度记录,怎么在地图上画出? 思路: 1先画出地图,使用cartopy。 2然后再将不连续的点绘制在地图中,这样的连线就是轨迹了。 ( cartopy库的安装见我的其他文章简明cartop…

【postgresql 】 ERROR: “name“ is not supported as an alias

org.postgresql.util.PSQLException: ERROR: "name" is not supported as an alias 错误:不支持将“name”作为别名 SELECT real_name name FROM doc_user 加上 在关键词上加上 “” 示例: SELECT real_name "name" FROM do…

05_2D3D转换

1 2D 转换 转换是 CSS3 中具有颠覆性的一个特征,可以实现元素的位移、旋转、变形、缩放。 通过 transform 转换来实现 2D 转换或者 3D 转换。 2D 转换包括: 缩放 scale移动 translate旋转 rotate倾斜 skew(了解) 1.1 缩放 sc…

【EI会议信息】第五届物联网、自动化和人工智能国际会议(IoTAAI 2023)

第五届物联网、自动化和人工智能国际会议(IoTAAI 2023) 2023 5th International Conference on Internet of Things, Automation and Artificial Intelligence 第五届物联网、自动化和人工智能国际会议(IoTAAI 2023)将于2023年1…

周界警戒AI算法+视频智能分析在安全生产场景中的应用

长期以来,周界防范安防系统在大型园区、工厂、社区、机场、火车站站台、重点单位等领域应用较为广泛和常见。随着AI人工智能等新兴技术的快速发展与落地应用,通过AI智能检测与视频智能分析技术,现代化的周界安防系统可以做到全天候快速、准确…

【PX4】PX4第一个offborad例程

【PX4】PX4第一个offborad例程 文章目录 【PX4】PX4第一个offborad例程1. 什么是OFFBOARD2. 第一个offboard例程3. 编写launch文件Reference 1. 什么是OFFBOARD PX4的OFFBOARD指的是外部控制模式,飞行器根据飞行控制栈外部(如机载计算机)提供…

C/C++/Python图像处理算法实战【3】彩色图像灰度化和二值化处理

本篇文章旨在通过详细的代码逐行注释,介绍如何分别使用 C/C++/Python 对彩色图像做灰度化(最大值法、平均值法、加权平均值法)和二值化处理(平均值法、双峰法、OTSU法)。 原理解析 图像表示 数字图像通常采用矩阵表示。以一幅数字图像F左上角像素中心为坐标原点,一幅M…

Prometheus-Rules 实战

文章目录 1 node rules2 nginx rule2.1 Nginx 4xx 错误率太多2.2 Nginx 5xx 错误率太多2.3 Nginx 延迟高 3 mysql rule3.1 MySQL 宕机3.2 实例连接数过多3.3 MySQL高线程运行3.4 MySQL 从服务器 IO 线程没有运行3.5 MySQL 从服务器 SQL 线程没有运行3.6 MySQL复制滞后3.7 慢查询…

小米手机打开开发者模式

1、打开设置 2、 3、 4、多次连续点击版本,直到提示打开开发者模式 5、进入手机开发者模式后,点击进入“设置”主页的“更多设置”。 6、接着点击进入“开发者选项”。 7、最后打开“USB调试”选项后,手机就打开了USB调试模式。 8、可以…

飞行动力学 - 第35节-动操纵性 之 基础点摘要

飞行动力学 - 第35节-动操纵性 之 基础点摘要 1. 动操纵性2. 传递函数3. 动稳定性与动操纵性4. 参考资料 1. 动操纵性 Free response: x 0 ≠ 0 , u 0 x_0 \ne 0, u 0 x0​0,u0Forced response: x 0 0 , u ≠ 0 x_0 0, u \ne 0 x0​0,u0 驾驶员操纵飞机的方式有开环…

【.net core】解决无法下载wgt文件问题

//StartUp.cs文件中Configure方法中添加以下代码 app.UseStaticFiles(new StaticFileOptions{FileProvider new PhysicalFileProvider(Directory.GetCurrentDirectory()),ContentTypeProvider new FileExtensionContentTypeProvider(new Dictionary<string, string>{{ …