当前位置: 首页 > news >正文

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并且可以正常命中断点并进行调试了
在这里插入图片描述
在这里插入图片描述

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • ScriptEcho:AI赋能的前端代码生成神器
  • HarmonyOS 与 OpenHarmony 的区别详解
  • 【C++程序设计】——利用数组处理批量数据(二)
  • 前端低代码必备:FrontendBlocks 4.0版本重磅发布,助力Uniapp-X原生APP开发
  • ChatGPT能代替网络作家吗?
  • 主题巴巴WordPress主题合辑打包下载+主题巴巴SEO插件
  • 深入理解接口测试:实用指南与最佳实践(一) 环境安装
  • Vue学习指南
  • 洛谷 P1347 排序(福建省历届夏令营)(图论:拓扑排序)
  • 暂存篇:高频面试题基本总结回顾(含笔试高频算法整理)
  • windows中node版本的切换(nvm管理工具),解决项目兼容问题 node版本管理、国内npm源镜像切换(保姆级教程,值得收藏)
  • Spring-创建bean
  • 谷粒商城实战笔记-122~124-全文检索-ElasticSearch-分词
  • JVM—虚拟机类加载器
  • 机器学习练手(三):基于决策树的iris 多分类和波士顿房价预测
  • 「前端早读君006」移动开发必备:那些玩转H5的小技巧
  • AWS实战 - 利用IAM对S3做访问控制
  • Fabric架构演变之路
  • Java 最常见的 200+ 面试题:面试必备
  • Linux各目录及每个目录的详细介绍
  • select2 取值 遍历 设置默认值
  • 不发不行!Netty集成文字图片聊天室外加TCP/IP软硬件通信
  • 聊聊springcloud的EurekaClientAutoConfiguration
  • 配置 PM2 实现代码自动发布
  • 数据科学 第 3 章 11 字符串处理
  • [Shell 脚本] 备份网站文件至OSS服务(纯shell脚本无sdk) ...
  • 积累各种好的链接
  • ​ubuntu下安装kvm虚拟机
  • ​油烟净化器电源安全,保障健康餐饮生活
  • #13 yum、编译安装与sed命令的使用
  • #nginx配置案例
  • #我与Java虚拟机的故事#连载19:等我技术变强了,我会去看你的 ​
  • (145)光线追踪距离场柔和阴影
  • (2009.11版)《网络管理员考试 考前冲刺预测卷及考点解析》复习重点
  • (补)B+树一些思想
  • (每日持续更新)jdk api之FileFilter基础、应用、实战
  • (免费领源码)Python#MySQL图书馆管理系统071718-计算机毕业设计项目选题推荐
  • (十八)devops持续集成开发——使用docker安装部署jenkins流水线服务
  • (四)搭建容器云管理平台笔记—安装ETCD(不使用证书)
  • (一)kafka实战——kafka源码编译启动
  • (转载)深入super,看Python如何解决钻石继承难题
  • .htaccess配置常用技巧
  • .NET Entity FrameWork 总结 ,在项目中用处个人感觉不大。适合初级用用,不涉及到与数据库通信。
  • .NET MVC第三章、三种传值方式
  • .NET/C# 使用反射调用含 ref 或 out 参数的方法
  • .net之微信企业号开发(一) 所使用的环境与工具以及准备工作
  • @RequestMapping用法详解
  • [].shift.call( arguments ) 和 [].slice.call( arguments )
  • [Algorithm][综合训练][kotori和n皇后][取金币][矩阵转置]详细讲解
  • [Angular 基础] - 数据绑定(databinding)
  • [Armbian] 部署Docker版Home Assistent,安装HACS并连接米家设备
  • [BSGS算法]纯水斐波那契数列
  • [C# 网络编程系列]专题六:UDP编程
  • [C#][DevPress]事件委托的使用
  • [C#]winform部署yolov9的onnx模型