04-vscode搭建cmake的编译环境

news2025/2/25 12:53:49

vscode+mingw搭建C/C++环境系列

01.vscode+mingw搭建编译调试环境

02-vscode编译调试单个源文件程序

03-vscode编译调试多个源文件程序

04-vscode搭建cmake的编译环境

文章目录

  • 一、简述
  • 二、vscode搭建cmake的编译环境(方法1)
    • 1.配置cmake构建目录(可忽略)
    • 2.选择cmake的构建套件(gcc)
    • 3.编写CMakeLists.txt
    • 4.启动调试运行
  • 三、vscode搭建cmake的编译环境(方法2)
    • 1.cmake构建说明
    • 2.配置launch.json文件
    • 3.配置tasks.json文件
    • 4.配置settings.json文件
    • 5.启动调试运行


一、简述

前面的文章中提到过通过修改settings.json文件和tasks.json文件可以完成多个源文件程序编译运行,但是如果源文件较多,每次都手动修改编译参数,那么比较麻烦,所以本文讲述下如何在vscode中使用cmake工程。

二、vscode搭建cmake的编译环境(方法1)

1.配置cmake构建目录(可忽略)

文件–》首选项–》搜索cmake,配置cmake的一些参数和中间文件路径(可不用设置),如下图:cmake的构建目录在当前的工作区的build的目录下。
在这里插入图片描述

2.选择cmake的构建套件(gcc)

未配置cmake工程前,
在这里插入图片描述
快捷键: shift+alt+p 输入cmake,选择"CMake Quick Start"
在这里插入图片描述
选择cmake的构建套件,这里使用的是gcc mingw
在这里插入图片描述
配置cmake工程完后,下面会出现配置选项
1:编译选项:Debug、release、RelWithDebugInfo
2:选择的编译器,GCC 还是VC
3:调试程序
在这里插入图片描述

3.编写CMakeLists.txt

project(test)

add_executable(test main.cpp add.cpp)

文件结构: build里面存放编译过程中的中间文件,该目录的配置在前面的配置cmake参数
在这里插入图片描述

4.启动调试运行

成功构建cmake工程文件后,可点击下面按钮,进行运行调试
在这里插入图片描述

三、vscode搭建cmake的编译环境(方法2)

1.cmake构建说明

  • 官网上下载一个cmake程序,将安装的cmake的bin目录添加到PATH的环境变量
  • 编写简单的CMakeLists.txt
project(test)
add_executable(main main.cpp add.cpp)
  • 多文件编译调试
mkdir build   		 //创建build目录
cd    build   		 //进入build目录
					 //如果电脑上已经安装了vs,cmake可能会调用微软的MSVC的编译器,
					 //使用cmake -G "MinGW Makefiles" ../代替 cmake ../
					 //cmake主要寻找CMakeLists.txt文件
cmake  ../   		//根据CMakeLists.txt文件生成MakeFile文件
mingw32-make.exe    //根据MakeFile文件编译成可执行的运行程序
  • 配置launch.json文件:调试时配置
  • 配置tasks.json文件: 调试之前的构建配置

2.配置launch.json文件

  • 创建launch.json文件
    在这里插入图片描述
    添加调试配置:可以选择 调试程序或者附加到某个进程上调试
    在这里插入图片描述
    launch.json
{
    // 使用 IntelliSense 了解相关属性。 
    // 悬停以查看现有属性的描述。
    // 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [
     
        {
            "name": "main", // 配置名称,将会在启动配置的下拉菜单中显示  
            "type": "cppdbg", // 配置类型,这里只能为cppdbg  
            "request": "launch", // 请求配置类型,可以为launch(启动)或attach(附加)  
            "program": "${workspaceFolder}/build/main.exe", // 将要进行调试的程序的路径  
            "args": [], // 程序调试时传递给程序的命令行参数,一般设为空即可  
            "stopAtEntry": false, // 设为true时程序将暂停在程序入口处,一般设置为false  
            "cwd": "${workspaceFolder}", // 调试程序时的工作目录,一般为${workspaceFolder}即代码所在目录  
            "environment": [],
            "externalConsole": true, // 调试时是否显示控制台窗口,一般设置为true显示控制台  
            "MIMode": "gdb",
            "miDebuggerPath": "C:\\Users\\Admin\\AppData\\Local\\Programs\\mingw64\\bin\\gdb.exe", 
            // miDebugger的路径,注意这里要与MinGw的路径对应  
            "setupCommands": [
                {
                    "description": "Enable pretty-printing for gdb",
                    "text": "-enable-pretty-printing",
                    "ignoreFailures": true
                }
            ],
            "preLaunchTask": "build", // 调试会话开始前执行的任务,一般为编译程序,c++为g++, c为gcc  
        }
    ]
}

主要参数说明:

  • program:要调试的程序的全路径名称
  • args:调试时传入的命令行参数
  • “cwd”: “${workspaceFolder}”:调试时进入到当前的工作目录
  • miDebuggerPath:使用的调试器的全路径
  • preLaunchTask:表示调试前需要做的任务操作,"preLaunchTask"中的"build"必须要和tasks.json文件中的label的Value对应,否则在执行调试的时候,无法确认preLaunchTask需要执行什么操作

3.配置tasks.json文件

如图所示:在启动调试之前,执行launch.json文件中的preLaunchTask的build时,vscode会去查找对应的tasks.json文件中label为"build",而tasks.json中的build又依赖标签cmake和标签make的操作,
在这里插入图片描述
tasks.json

{
    "tasks": [
        {
          "type":"shell",
          "label": "cmake",
          "command":"cmake",
          "args": [
            "../"
          ],
    
        },
        {
          "label": "make",
          "command":"mingw32-make",
          "args": [

          ],
        },
        {
            "label": "build",
            "dependsOn":[
                "cmake",
                "make"
            ]
        },
    ],
    "version": "2.0.0",
    "options": {
      "cwd": "${fileDirname}/build"
  },
}
  • “label”: “cmake”: 使用命令cmake,根据CMakeLists.txt创建MakeFile文件
  • “label”: “make”: 使用命令mingw32-make,根据MakeFile生成可执行的程序
    上述tasks.json文件,表示在每次调试之前都重新构建一次应用程序

4.配置settings.json文件

{
    "code-runner.executorMap": {

        "javascript": "node",
        "java": "cd $dir && javac $fileName && java $fileNameWithoutExt",
        "c": "cd $dir && gcc $fileName -o $fileNameWithoutExt && $dir$fileNameWithoutExt",
        "cpp": "cd $dir/build && cmake ../ && mingw32-make &&  $dir/build/fileNameWithoutExt",
    }
}

将settings.json文件原本cpp编译命令里面的g++,修改为cmake构建工程。

5.启动调试运行

使用vscode里面的调试运行按钮,
Run Code: 依赖settings.json
调试C/C++文件: 依赖launch.json和tasks.json文件
在这里插入图片描述

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

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

相关文章

Redux——详解

一.初识Redux 相当于vue中的vuex 1.redux 是一个独立专门用于做状态管理的 JS 库(不是 react 插件库) 2.它可以用在 react, angular, vue 等项目中, 但基本与 react 配合使用 3.作用: 集中式管理 react 应用中多个组件共享的状态 看看Redux的工作原理图 如果要进行加一操作…

ES6---promise详解及用法

一、什么是Promise Promise是ES6异步编程的一种解决方案(目前最先进的解决方案是async和await的搭配(ES8),但是它们是基于promise的),从语法上讲,Promise是一个对象或者说是构造函数,用来封装异步操作并可…

炫酷登录注册界面【超级简单 jQuery+JS+HTML+CSS实现】

一:源码获取 这两天根据需求写了一个比较好看的有动态效果的登录注册切换页面,这里我将源码资源分享给大家,大家可以直接免费下载使用哦,没有 vip 的小伙伴找我私聊发送"登录注册"即可我给你发文件,此登录注…

四、vue中路由router配置详解

目录 一、vue中的路由作用 二、vue中的路由router 使用步骤 三、路由跳转 1、带参数路由跳转: (1)this.$router.push() : (2)this.$router.replace() : 2、不带参数路由跳转 3、this.…

【手把手教安装】VUE安装教程+VScode配置!!!

含泪整理Vue安装教程 因为换了新电脑很多软件要重装,所以想到可以写一份教程,为我以后换电脑方便重装也为了大家!! 第一次安装Vue踩坑太多,这里整理一份超详细教程(win11也可!!&…

uniapp 控制台警告 DevTools failed to load SourceMap: Could not load content for http://127.0.0.1问题解决

在uniapp中控制台警告,这是用于在开发时定位到报错的源码位置的工具SourceMap出问题了,如果单纯只是想消除这个警告的方法写在下面第一个,真正解决工具问题的方法是第二个(需要下载一个插件),现在放在这边做…

如何修复运行缓慢的 WordPress 网站?

💂 个人网站:【海拥】【摸鱼游戏】【神级源码资源网站】🤟 前端学习课程:👉【28个案例趣学前端】【400个JS面试题】💅 想寻找共同学习交流、摸鱼划水的小伙伴,请点击【摸鱼学习交流群】 就其 SEO 而言&…

npm、nrm两种方式查看源和切换镜像

一、使用npm查看当前源、切换淘宝镜像、切换官方源 (1)npm查看当前源: npm get registry(2)npm设置淘宝镜像源: npm config set registry http://registry.npm.taobao.org(3)npm设…

2023 前端一场面试及答案整理

金三马上就要开始了,俗话说得好,知己知彼百战百胜,多准备总是没有错的。以面试的形式和大家一起学习、一起回顾我们的职场生涯。今天简单总结一下我个人去面试,包括我在面试别人时的经验。加油加加油!!&…

2022最新Nodejs下载安装配置步骤(保姆级教程)

1. 进入官网选择下载版本 http://nodejs.cn/download/2.安装过程 步骤1:选择next选项 步骤2:勾选接受协议选项,点击 next(下一步)按钮 : 步骤3:其默认安装目录是C:\Program Files\nodejs\,当…

【Python】ttkbootstrap的介绍与使用

一、什么是ttkbootstrap? 官方文档 [较慢]:https://ttkbootstrap.readthedocs.io/en/latest/ ttkbootstrap 是一个基于 tkinter 的界面美化库,使用这个工具可以开发出类似前端 bootstrap 风格的 tkinter 桌面程序 二、安装步骤 安装命令…

Vue项目安装less和less-loader

第一步:查看webpack和webpack-cli是否安装 打开cmd,通过命令查看 webpack -vwebpack-cli -v如果没有安装,要先进行安装 可以通过 npm view webpack version / npm view webpack-cli version 查看当前webpack的最新版本 可以通过 npm vie…

什么是axios(写给小白的理解笔记)

0.为什么会诞生axios 最初浏览器页面向服务器请求数据时,返回的是整个页面,整个页面都会刷新,当我们只需要请求部分数据时,返回整个页面会造成网络资源的占用,为了提高数据请求效率,异步网络请求Ajax出现了…

羊了个羊网页版

最近羊了个羊火的不得了,利用周末时间实现一个网页版。步骤如下: 1,用reactjs 实现。 2,实现Gameroom类。 3,实现Card类。 4,通过父组件控制子组件通信方式,控制点击事件。 5,通过t…

nvm切换node版本

在实际的前端开发过程中,可能会经常遇见 node.js 的版本问题,不同的项目需要使用不同的 node.js 版本。比如Vue2和Vue3需要的Node版本不一样。 地址:https://github.com/coreybutler/nvm-windows/releases 注意:安装之前必须完…

ChatGPT初体验——震撼,好用,贾维斯已来

2022.12.26 大概一个月的使用体验,我觉得chagpt的使用还算远远超出我的想象,可以说只有你想不到的,最近需要写一个基于shell的学生选课系统,但是时间实在是紧张的很,一开始chatgpt是无法接受这么大的要求的&#xff0c…

js实现数组去重的方式(7种)

目录JS数组去重的方式1.利用Set()Array.from()2.利用两层循环数组的splice方法3.利用数组的indexOf方法4.利用数组的includes方法5.利用数组的filter()indexOf()6.利用Map()7.利用对象JS数组去重的方式 例:将下面数组去除重复元素(以多种数据类型为例&a…

vue开发中,数据更新,但视图不刷新

我们在开发过程中会碰到数据更新,但是视图并未改变的情况,情况如下: 第一种:动态给对象新增属性或者删除属性是不会触发视图刷新的,Vue识别不到; 第二种:通过数组下标修改数组中的元素或者手动修改数组的长度,Vue识别不到&#…

【Javaweb学习笔记】在Eclipse中创建Web项目

【Javaweb学习笔记】在Eclipse中创建Web项目 哈喽大家好,这里是Java框架学习笔记专栏第二期 本期内容——在Eclipse中创建Web项目 前期回顾: 第一期——schema约束 笔者还是菜菜,还请大家多多指教呀! 文章目录【Javaweb学习笔记】…

解决onebot提示当前QQ版本过低,请升级到最新版在登录!

文章目录前言方法一方法二1️⃣下载文件2️⃣本地运行3️⃣重新启动go-cqHttp4️⃣服务器下载go-cqhttp5️⃣配置gocqhttp6️⃣启动go-cqhttp结语前言 🥇个人主页:MIKE笔记 🥈文章专栏:技术教程 📣TG交流群&#xff1a…