Cursor搭配cmake实现C++程序的编译、运行和调试

Cursor搭配cmake实现C++程序的编译、运行和调试

Cursor是一个开源的AI编程编辑器,开源地址https://github.com/getcursor/cursor ,它其实是一个集成了Chat-GPT的VS Code。

关于VS Code和VS的对比可以参考这篇文章VS Code 和 Visual Studio 哪个更好?

1 准备工作

1.1 Cursor下载、安装和插件安装

1.下载Cursor
在这里插入图片描述

2.双击下载好的exe文件进行安装(安装过程很简单,就不赘述了)
在这里插入图片描述

3.安装插件
首先安装一个中文插件将cursor汉化,方便入门学习,安装好之后重启一下cursor就可以生效了,
在这里插入图片描述

然后安装以下几个必备插件用于C++开发
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

1.2 MinGW、CMake工具下载

我这里之前安装过QT5.12.2,在QT的安装目录下的Tool文件夹中已经包含了MinGW和CMake,直接进行环境变量配置就可以了。如果没有可以在公众号VSCode中回复cpp获取压缩包,比在网站上下载安装包一步步安装要快很多。
压缩包下载好之后,直接解压到自己电脑合适的路径下即可使用。

1.3 MinGW、CMake环境变量配置

1.右键“此电脑”,点击“属性”打开设置面板,选择“高级系统设置”,在弹出的系统属性面板中选择“高级”选项卡,然后点击“环境变量”按钮进入环境变量配置界面
2.在“系统变量”中选中“Path”,然后点击“编辑”,再点击“新建”,将cmake.exe、g++.exe、mingw32-make.exe三个文件所在的目录路径加进来
在这里插入图片描述

3.回到电脑桌面,按住Shift后点击右键,选择“在此处打开Powershell窗口”,分别在命令行输入gcc、g++、cmake后,如果是这样的结果,说明配置成功:
在这里插入图片描述

2 代码演练

2.1 使用AI辅助写代码

1.在自己电脑合适的位置新建一个文件夹,我这里是在D盘建了一个名为"VsCodeTest"的文件夹,
在这里插入图片描述

2.在Cursor中打开新建的文件夹
在这里插入图片描述

3.光标停留在文件夹名上,点击“新建文件”,新建一个main.cpp
在这里插入图片描述

4.在main.cpp中,按Ctrl+K,输入“写一个交换两个int型数据的函数”,按回车会自动生成一段代码:
在这里插入图片描述

5.检查无误后按Ctrl+Enter确认代码
在这里插入图片描述

6.继续按Ctrl+K,输入“写一个main函数调用上面的交换函数”,按回车会自动生成main函数:
在这里插入图片描述

7.导入头文件iostream解决代码报错
在这里插入图片描述

2.2 手动编译和运行

1.在Cursor菜单栏选择“终端”-“新建终端”
在这里插入图片描述

2.在终端窗口中的命令行里输入g++ .\main.cpp后回车对main.cpp进行编译,目录下会生成一个a.exe
在这里插入图片描述

3.在终端窗口中的命令行里输入.\a.exe运行a.exe
在这里插入图片描述

此时的a.exe不带调试信息,我们可以通过ls指令查看它的大小:
在这里插入图片描述

如果想要拥有一个带有调试信息的可执行文件,我们需要修改一下编译指令:
在这里插入图片描述

2.3 自动编译、运行和调试

1.在菜单栏选择“运行”-“启动调试”
在这里插入图片描述

2.选择编译器,配置tasks.json
在这里插入图片描述

此时工作目录下会自动生成一个.vscode文件夹,里面有一个tasks.json文件,按照我的理解,这个文件里面定义了一些编译的任务和对应的设置,我这边自动生成的tasks.json如下所示:
在这里插入图片描述

鼠标停留在某一项上会有一个tooltip提示你这一项是配置什么的。仔细观察会发现,其实"command"+"args"这两项对应我们在2.2节最后一步编译带调试信息的exe时的编译指令,所以我们将tasks.json修改如下:
在这里插入图片描述

3.在运行和调试页面点击“创建launch.json文件”
在这里插入图片描述

4.选择调试器:
在这里插入图片描述

5.在自动生成的launch.json文件中点击添加配置
在这里插入图片描述

此时会自动生成如下配置,需要重点关注和修改的已用红框标出
在这里插入图片描述

其中"program"配置的是我们要运行和调试的可执行文件,也就是前面tasks.json中编译生成的main.exe,"cwd"为目标工作目录,要与tasks.json中一致,"miDebuggerPath"配置的是调试器的路径,因为我的gdb.exe跟前面的g++.exe和mingw32-make.exe在同一目录下,该目录已经添加到系统环境变量中,所以这里写一个"gdb.exe"就可以了。另外再增加一个"preLaunchTask"属性设置让launch.json在每次启动调试前去调用tasks.json中的任务,最终launch.json修改如下:
在这里插入图片描述

6.在main.cpp增加几个断点,此时点击运行和调试即可以正常命中断点并进行调试了。
在这里插入图片描述

2.4 使用cmake进行多文件编译、运行和调试

1.删除之前生成的exe文件,在工作目录下创建swap.h和swap.cpp,将swap函数移出,另外新建CMakeLists.txt(文件名一定要写对),各文件内容如下:
在这里插入图片描述

2.如果电脑上装了VS,为了防止默认调用微软的MSVC编译器,在.vscode文件夹下新建一个settings.json(文件名一定要写对)添加如下设置,相当于用(cmake -G “MinGW Makefiles” …)代替(cmake …)
在这里插入图片描述

3.在搜索框输入>camke,选择cmake:配置(这一步等同于在终端窗口命令行输入cmake -D “CMAKE_BUILD_TYPE:STRING=Debug” -D “CMAKE_EXPORT_COMPILE_COMMANDS:BOOL=TRUE” -S ./ -B ./build -G “MinGW Makefiles”)
在这里插入图片描述

出现如下字眼说明构建成功:
在这里插入图片描述

此时工作目录下会自动生成build文件夹:
在这里插入图片描述
4.上面一步的动作也可以写成tasks.json中的任务自动被launch.json调用,修改tasks.json的配置如下

{"version": "2.0.0","options": {"cwd": "${workspaceFolder}/build"},"tasks": [{// 任务一: 创建 build 文件夹"type": "shell","label": "CreateBuildDir", // lable 标记任务名称"command": "mkdir",  // 命令"args": ["-Force","build"],"options": {"cwd": "${workspaceFolder}"},"problemMatcher": ["$gcc"],},{// 任务二: 执行cmake指令根据CMakeLists.txt在build目录下生成Makefile"type": "shell","label": "cmake","command": "cmake","args": ["-D","CMAKE_BUILD_TYPE:STRING=Debug",//编译带调试信息的"-D","CMAKE_EXPORT_COMPILE_COMMANDS:BOOL=TRUE","-G","MinGW Makefiles","-S",".."//CMakeLists.txt在build的上一级目录中],"dependsOn":["CreateBuildDir"]},{// 任务三: 执行mingw32-make.exe根据Makefile编译可执行文件"label": "make","group":{"kind": "build","isDefault": true},"command": "mingw32-make.exe","args": [],"dependsOn":["cmake"]},{// 任务四: 调用任务三"label":"C/C++: g++.exe 生成活动文件","dependsOn":["make"]}],"presentation": {"panel": "new",}
}

5.修改launch.json的配置如下:
在这里插入图片描述

6.此时点击运行和调试会自动在build目录下生成main.exe并且可以正常命中断点并进行调试了
在这里插入图片描述
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

等保测评中的访问控制与用户认证:构建安全的访问管理机制

在当今数字化时代,信息安全已成为企业和组织不可忽视的关键议题。等保测评,作为我国信息安全等级保护制度的重要组成部分,对访问控制与用户认证提出了严格要求,旨在构建安全的访问管理机制,保护信息资产不受未授权访问…

怎么写进修总结汇报ppt?有这3个AI软件做PPT再也没烦恼!

在当今瞬息万变的职场环境中,持续学习和自我提升已不再是一种选择,而是生存和发展的必需。作为一种系统化的学习方式,进修为职场人士提供了宝贵的机会来更新知识储备、提升专业技能,并拓展职业视野。当然,进修的价值不…

Dreamweaver (DW)2021 下载 安装

将 Dreamweaver 2021 压缩包解压到本地: 点击蓝色字体下载压缩包 提取码 ixsu 鼠标右键 点击 Set-up 选择 以管理员身份运行: 点击 更改位置 可以自定义选择安装路径 也可以选择默认位置 点击 继续: 等待安装 正常等待5分钟左右&#xff1…

12月长沙学术会议:EI检索,机器人、自动化与智能控制方向

在春意盎然、生机勃勃的四月,全球科技界的目光聚焦于中国长沙,这里即将迎来一场科技与智慧碰撞的盛宴——第四届机器人、自动化与智能控制国际会议(ICRAIC 2024)。本次盛会由历史悠久、文化底蕴深厚的湖南第一师范学院荣耀主办&am…

电话营销机器人革新电销行业

第一,减少企业各方面的支出 企业需要各方面的支出。例如,招聘成本和管理成本、员工薪资和社保都是非常大的支出。但AI智能电销机器人,只要购买费用和电话费的一小部分,就没有更多的费用。经计算,该机器人的成本仅相当于…

vector 简单模拟实现

目录 一. vector成员变量 二. vector的构造函数和析构函数 三. vector的成员函数 1. 容量操作函数 扩容操作 (1). finish更新问题 (2). 扩容深浅拷贝问题 resize与尾插、尾删与判空 insert与erase与clear 2. 函数重载 (1). 赋值运算符重载 (2). [ ]重载进行访问 四. …

c++ - unordered_set与unordered_map模拟实现

文章目录 前言一、unordered_set模拟实现二、unordered_map模拟实现 前言 1、unordered_set与unordered_map的介绍与接口使用可参考:unordered_set 、 unordered_map。 2、unordered_set和 unordered_map 的底层实现都是基于哈希表的。哈希表是一种通过哈希函数组织…

LoRa无线通讯,让光伏机器人实现无“线”管理

光伏清洁机器人,作为光伏电站运维的新兴关键设备,已跃升为继组件、支架、光伏逆变器之后的第四大核心组件,正逐步成为光伏电站的标准配置。鉴于光伏电站普遍坐落于偏远无人区或地形复杂之地,光伏清洁机器人必须具备远程操控能力、…

深入源码P3C-PMD:rule (4)

系列文章目录 文章目录 系列文章目录rule 的应用类别 rule rule 自定义XML rule 定义Tree 漫游错误报告生命周期 designer rule相关的代码在每个子 module 的 rule 文件夹。而且也以一些 ruleset 为范围分了文件夹,如下图所示: 对每个 rule 来说&#xf…

PHP教育培训小程序系统源码

🚀【学习新纪元】解锁教育培训小程序的无限可能✨ 📚 引言:教育培训新风尚,小程序来引领! Hey小伙伴们,是不是还在为找不到合适的学习资源而烦恼?或是厌倦了传统教育模式的单调?今…

盘点12款企业常用源代码加密软件,源代码防泄密很重要!

在当今的商业环境中,源代码作为企业的核心资产之一,其安全性不容忽视。源代码的泄露可能导致企业丧失竞争优势、面临法律诉讼甚至经济损失。因此,选择合适的源代码加密软件成为企业保护知识产权和核心技术的关键步骤。 1. 安秉源代码加密软件…

【JVM】Java内存区域图文详解

1.JVM运行时区域总览 Java 虚拟机在执行 Java 程序的过程中会把它管理的内存划分成若干个不同的数据区域。 JVM运行时区域也成为Java内存区域。 在讨论Java内存模型时,通常将其分为线程共享区域和线程私有区域: 2.线程私有区域 2.1.程序计数器 程序计…

详解贪心算法

贪心算法(Greedy Algorithm) 概述: 贪心算法是一种在求解最优化问题时采取的一种常用算法策略。贪心算法的基本思想是,每次选择当前情况下的局部最优解,并相信这个局部最优解能够导致全局最优解。贪心算法通过迭代的方式一步步地…

SpringBoot3里的文件上传

需求分析: 在用户更换头像或者添加文章时,都需要携带一个图片的URL访问地址。当用户访问文件上传接口将图片的数据上传成功后,服务器会返回一个地址。我们后台需要提供一个文件上传的接口,用来接收前端提交的文件的数据并且返回文…

七夕情人节礼物有哪些走心礼物推荐,盘点惊喜爆棚的四大礼物分享

随着浪漫的七夕情人节的临近,恋人们开始寻找那些能够传达他们挚爱与深情的独特礼物,一份有心的礼物不仅能够成为情感的使者,还能在这一天为爱情增添更多甜蜜与回忆,在这个充满传说与浪漫的节日里,我们精心挑选了一系列…

查询表信息时有一个数据为null相关解决

查询的时候varchar类型的username一直查不到为null,这个问题干了我好久 当时我以为是连接mysql数据库的时候没有在url后面添加添加指定字符的编码、解码格式的参数约束.然后经过分析发现 我创建的这个Account对象 直接上结果,问题出在了setUsername()方法上 错误…

Scrapy入门篇

免责声明 本文的爬虫知识仅用于合法和合理的数据收集,使用者需遵守相关法律法规及目标网站的爬取规则,尊重数据隐私,合理设置访问频率,不得用于非法目的或侵犯他人权益。因使用网络爬虫产生的任何法律纠纷或损失,由使用…

用Java手写jvm之模拟方法调用指令invokexxx和方法返回指令xreturn

写在前面 源码 。 本文一起看下方法调用相关的指令invokexxx以及方法返回(栈帧弹出线程栈)相关的指令xReturn 。 1:正文 因为invokexxx指令和普通的指令不同,会创建一个新的栈帧,并压倒操作数栈中,所以我…

【python】Python中实现定时任务常见的几种方式原理分析与应用实战

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,…

【OpenCV C++20 学习笔记】腐蚀和膨胀

腐蚀和膨胀 形态学原理膨胀腐蚀 代码实现膨胀函数腐蚀函数运行结果 形态学原理 腐蚀和膨胀通常有以下用途: 去除噪音分离或合并图像中的元素找出图片上的强度的极大值区域和极小值区域 以下图作为原始图片: 膨胀 用核 B B B来扫描图像 A A A&#xff…