【VSCode】Windows环境下,VSCode 搭建 cmake 编译环境(通过配置文件配置)
除了之前的使用 VSCode 插件来编译工程外,我们也可以使用配置文件来编译cmake工程,主要依赖 launch.json 和 tasks.json 文件。
目录
一、下载编译器
1、下载 Windows GCC
2、选择编译器路径
二、配置 debug 环境
1、配置 lauch.json 文件
2、配置 tasks.json 文件
三、编译工程
1、测试工程结构
2、开始编译
一、下载编译器
1、下载 Windows GCC
这里是在Windows环境下,所以下载的是 Windows 环境使用的 gcc 编译器。
下载地址: MinGW-w64 - for 32 and 64 bit Windows - Browse Files at SourceForge.net

下载完毕后解压,并将 bin 目录添加到环境变量。bin 目录下有几个比较重要的执行文件

![]()
2、选择编译器路径
将 bin 目录添加到环境变量后,Ctrl + Shift + P 通过 UI 选择编译器路径


二、配置 debug 环境
配置文件 launch.json 和 tasks.json 都在 .vscode 目录下。其他目录可暂时不理会。

1、配置 lauch.json 文件
主要参数说明:
- program: 可执行文件的完整路径。这里的执行文件名必须和cmake生成的执行文件名一致
- miDebuggerPath: 调试器的完整路径。(即便添加了环境变量也需要填入完整路径)
- preLaunchTask:调试前要做的操作,会去tasks.json 文件中找对应的标签。cmake工程在调试之前一般需要 cmake .. ,然后再 make 生成执行文件
{"version": "0.2.0","configurations": [{"name": "C/C++ Runner: Debug Session", // 配置名称(调试时会在下拉菜单中显示)"type": "cppdbg", "request": "launch", "program": "${workspaceFolder}/build/testProj.exe", // 执行文件的完整路径(这里的执行文件名必须和cmake生成的执行文件名一致)"args": [], // 执行文件运行时,传递给执行文件的命令行参数"stopAtEntry": false, // 一般设为false,设为true时会将程序暂停在程序入口"externalConsole": true, // 一般设为true,表示调试时显示控制台"cwd": "${workspaceFolder}", // 调试程序的工作目录,一般为 ${workspaceFolder} 即代码所在目录"MIMode": "gdb","miDebuggerPath": "D:/Download/Windows GCC/x86_64-7.3.0-release-win32-sjlj-rt_v5-rev0/mingw64/bin/gdb.exe", // 使用的调试器的全路径"setupCommands": [{"description": "Enable pretty-printing for gdb","text": "-enable-pretty-printing","ignoreFailures": true}],"preLaunchTask": "build", // 表示调试前要做的操作,这里的build只是一个标签,标签内容在 tasks.json 中}]
}

2、配置 tasks.json 文件
这里注意 -G MinGW Makefiles,如果不加这个选项,默认会按照 Visual Studio 的标准进行编译,生成的文件如下:

很显然这并不是我们期望的,我希望生成的是 Makefile 文件,因此这里需要加上 -G MinGW Makefiles 选项,生成 mingw32-make 能够编译的Makefile。生成的文件如下:

{"tasks": [{"label": "build", // build 操作"dependsOn":["cmake", // build 操作依赖于 cmake 和 make 操作"make"]},{"label": "cmake", // cmake 操作"type":"shell", "command":"cmake", // 执行 cmake 操作所使用的命令"args": [ // cmake 命令执行时的命令行参数"-G MinGW Makefiles", // 生成 mingw32-make 能够编译的Makefile"../"],},{"label": "make", // make 操作"command":"mingw32-make.exe", // 执行 make 操作所使用的命令(mingw32-make.exe已经添加了环境变量)"args": [],"options": {"cwd": "${workspaceFolder}/build" // 表示执行当前操作的工作目录}},],"version": "2.0.0","options": {"cwd": "${workspaceFolder}/build" // 表示执行上述操作时的工作目录},
}

三、编译工程
1、测试工程结构
因为是使用配置文件配置,需要在 CMakeLists.txt 的同级目录下创建一个 build 目录

CMakeLists.txt
cmake_minimum_required(VERSION 3.15.0)
project(testProj)file(GLOB ALL_SOURCES *.cpp *.h)add_executable(${PROJECT_NAME} ${ALL_SOURCES})
main.cpp
#include <iostream>int main(void)
{printf("hello world \n");return 0;
}
2、开始编译
点击 Start Debugging 或者按 F5 就可以开始编译了。

第一次编译会报错,因为一开始 build 目录为空,cmake 还未执行完,make 操作就已经先运行了,所以会出现找不到 Makefile 的问题。


F5 再次编译,这个时候不出意外的话就会编译通过了

参考文章:
04-vscode搭建cmake的编译环境_vscode配置cmake编译-CSDN博客
相关文章:
【VSCode】Windows环境下,VSCode 搭建 cmake 编译环境(通过配置文件配置)
除了之前的使用 VSCode 插件来编译工程外,我们也可以使用配置文件来编译cmake工程,主要依赖 launch.json 和 tasks.json 文件。 目录 一、下载编译器 1、下载 Windows GCC 2、选择编译器路径 二、配置 debug 环境 1、配置 lauch.json 文件 2、配置…...
useragent识别访问设备
背景需求 ruoyi框架,前后端分离。现在要在用户访问的时候根据不同的设备跳转到不同的登录页面。 教程 router/index.js 修改src/router/index.js,在这里增加自己的要跳转的页面 permission.js 在白名单中添加自己的登录页面 增加以下识别的代码 le…...
紫光同创FPGA实现UDP协议栈网络视频传输,带录像和抓拍功能,基于YT8511和RTL8211,提供2套PDS工程源码和技术支持
目录 1、前言免责声明 2、相关方案推荐我这里已有的以太网方案紫光同创FPGA精简版UDP方案紫光同创FPGA带ping功能UDP方案紫光同创FPGA精简版UDP视频传输方案 3、设计思路框架OV5640摄像头配置及采集数据缓冲FIFOUDP协议栈详解MAC层发送MAC发送模式MAC层接收ARP发送ARP接收ARP缓…...
【机器学习】逻辑回归
文章目录 逻辑回归定义损失函数正则化 sklearn里面的逻辑回归多项式逻辑回归 逻辑回归 逻辑回归,是一种名为“回归”的线性分类器,其本质是由线性回归变化而来的,一种广泛使用于分类问题中的广义回归算法。 线性回归是机器学习中最简单的的…...
DITA-OT 4.0新特性 - PDF themes,定制PDF样式的新方法
随着DITA-OT 4.0的发布,它提供了一种新的定制PDF样式方法,这种方法就是PDF theme。这篇文章来聊一聊这种定制PDF输出的新方法和实验结果。 在进入PDF theme细节之前,为各位读者梳理一下DITA-OT将DITA和Markdown发布成PDF的几种方法。 - 1 …...
MySQL 8.0 OCP认证精讲视频、环境和题库之四 多实例启动 缓存、事务、脏读
一、配置第一个mysqld服务 1、编辑选项文件,指定以下选项: [mysqld] basedir/mysql80 datadir/mysql80/data1 socket/mysql80/data1/mysqld.sock pid-file/mysql80/data1/mysqld.pid log-error/mysql80/dat…...
对代码感兴趣 但不擅长数学怎么办——《机器学习图解》来救你
目前,该领域中将理论与实践相结合、通俗易懂的著作较少。机器学习是人工智能的一部分,很多初学者往往把机器学习和深度学习作为人工智能入门的突破口,非科班出身的人士更是如此。当前,国内纵向复合型人才和横向复合型人才奇缺;具有…...
【EI会议征稿】第三届大数据、信息与计算机网络国际学术会议(BDICN 2024)
第三届大数据、信息与计算机网络国际学术会议(BDICN 2024) 2024 3rd International Conference on Big Data, Information and Computer Network 第三届大数据、信息与计算机网络国际学术会议(BDICN 2024)定于2024年1月12-14日在…...
【Arduino+ESP32+腾讯云+sg90】强制门户+腾讯云控制开关灯
作者有话说 博主对于Arduino开发并没有基础,但是为了实现更加方便的配网,这几天一直在尝试用ESP32-12F(因为手头刚好有一个,其他的也可以)来做远程开关灯!不知道大家是否注意到,上一篇利用STM32…...
windows中elasticsearch7中添加用户名密码验证
1.找到elsatic的bin目录输入cmd 2.生成ca证书 输入 elasticsearch-certutil ca 在es7根目录生成ca证书,输入密码时直接回车即可,否则后面会报错 Please enter the desired output file [elastic-stack-ca.p12]: #这里直接回车即可 Enter password for…...
linux安装达梦数据库(命令行安装)
安装达梦数据库 创建安装用户 1,创建安装用户组dinstall [rootdmDMServer1 ~]# groupadd -g 12345 dinstallgroupadd : 创建组 -g : 指定组id(GID) 12345: 指定的组名称 dinstall : 组名 2,创建安装用户dmdba [rootdmDMSe…...
Flutter——最详细(CustomScrollView)使用教程
CustomScrollView简介 创建一个 [ScrollView],该视图使用薄片创建自定义滚动效果。 [SliverList],这是一个显示线性子项列表的银子列表。 [SliverFixedExtentList],这是一种更高效的薄片,它显示沿滚动轴具有相同范围的子级的线性列…...
解决容器内deepspeed微调大模型报错
解决容器内deepspeed微调大模型报错:[launch.py:315:sigkill_handler] Killing subprocess 问题描述:解决办法 问题描述: 在容器中用deepspeed微调百川大模型2时,出现上述错误,错误是由于生成容器时,共享内…...
UE 插件模块引用
如Plugons中的模块A想要引用模块B: 1、模块A中的.uplugin文件加入↓ 2、模块A中的.Build.cs文件加入↓ 3、在模块A需要用到模块B的地方直接include 4、重新generate Project 5、重新编译 注意两个模块之间不能循环引用...
python元组、拆包和装包
注意 元组不能修改元素 元组:如果元素为字符串且元素为1个,必须加一个, ********* t1 (aa,) 下标和切片 in not in for ... in ... 元组转为列表 拆包、装包...
1-Docker安装MySQL8.0
1 背景知识记录 1.1 MySQL 的基本配置记录 MySQL的配置文件目录(/etc/mysql): root2dd6033b5c17:/etc/mysql# pwd /etc/mysql root2dd6033b5c17:/etc/mysql# ls conf.d my.cnf my.cnf.fallback MySQL的data文件目录(/var/lib/my…...
配电房智能化改造在加油站等的应用
随着科技的发展和智能化趋势的推进,对加油站配电房进行智能化改造成为了一个必然的选择。智能化改造不仅可以提高加油站的工作效率,减少事故发生率,还可以实现能源的合理利用,提高经济效益。 力安科技加油站智能化改造升级是一种高…...
集准测试-架构真题(五十六)
如果数据库单标即可实现业务功能,采用()方式进行数据交换与处理较为合适。如果通过数据库不同表的连接操作获取数据才能实现业务功能,这时候采用()方式进行数据交换与处理合适。 主动记录数据网关包装器数…...
木与空间的舞蹈:奥地利住宅的独特设计
国外著名设计师,为一位业主设计了一座住宅,附带有附属建筑和有盖的入口,形成了像庭院一样的建筑群。 这座住宅采用了当地的传统建筑风格,有长方形的平面和陡峭的顶棚,与周围的房屋相符。然而,内部设计别具一…...
性能优化-卡顿优化-tarce抓取及分析
性能优化(卡顿分析) 文章目录 一、抓取trace的方法1.使用systrace抓取trace2.使用atrace抓取3.使用Perfetto抓取trace 二、trace文件的分析1.快捷操作1.1 导航操作1.2 快捷操作 2.chrome trace工具分析trace文件3.Prefetto分析trace文件 一、抓取trace的…...
别再死记硬背了!用DCM模式反激电路,手把手教你搞定宽电压输入的隔离电源
从零构建宽电压隔离电源:DCM反激电路实战指南 当你在深夜调试电路时突然闻到焦糊味,或是面对一堆烧毁的MOS管束手无策,是否想过——电源设计本可以更简单?本文将带你用工程师的思维重新理解反激变换器,避开教科书式的理…...
Word文档自动更新日期技巧
设置Word文档自动显示当天日期打开Word文档后,可以通过插入日期字段实现每次打开时自动更新为当天日期。方法1:使用日期字段在Word文档中定位光标到需要显示日期的位置。点击菜单栏"插入"→"文本"→"日期和时间"。在弹出的…...
Qwen3.5-2B图文理解教程:GIF动图逐帧理解+动态内容总结生成方法
Qwen3.5-2B图文理解教程:GIF动图逐帧理解动态内容总结生成方法 1. 引言 Qwen3.5-2B是一款轻量化多模态基础模型,属于Qwen3.5系列的小参数版本(20亿参数)。这款模型主打低功耗、低门槛部署,特别适配端侧和边缘设备&am…...
车载Java OTA升级崩溃率从18.7%降至0.3%:基于Delta Patch + 类隔离热修复的4步标准化流程
第一章:车载Java OTA升级崩溃率从18.7%降至0.3%:基于Delta Patch 类隔离热修复的4步标准化流程在车载嵌入式Java环境(JVM 11,ART兼容层)中,OTA升级引发的ClassCastException与NoClassDefFoundError曾导致高…...
别再只数步数了!深入聊聊ADXL345计步算法里的‘动态阈值’与‘最活跃轴’
别再只数步数了!深入聊聊ADXL345计步算法里的‘动态阈值’与‘最活跃轴’ 当你盯着智能手环上的步数统计时,有没有想过这串数字背后藏着怎样的算法智慧?ADXL345作为一款经典的三轴加速度传感器,其计步算法远非简单的阈值比较那么简…...
Seqlist 顺序表 的实现c语言
本小结重点: 你将学到 函数基础 传值传地址的区别结构体指针 简单循环控制 理解物理结构与存储结构的区别多文件分布 简单来说就是对动态数组进行函数封装,简化了很多功能所以很多就是对数组的利用,但更多是对结构体数组,所…...
【技术干货】把 Claude 变成“本地自动化工程师”:Anthropic Computer Use 能力与实战落地指南
摘要 Anthropic 在 Claude Code 中正式引入 Computer Use 能力,让大模型可以直接操作你的桌面应用和浏览器,从“写代码助手”升级为“全栈自动化代理”。本文从原理、典型场景、跨平台替代方案,到如何用统一 OpenAI 兼容 API(基于…...
Scarab:让空洞骑士模组管理变得如此简单
Scarab:让空洞骑士模组管理变得如此简单 【免费下载链接】Scarab An installer for Hollow Knight mods written in Avalonia. 项目地址: https://gitcode.com/gh_mirrors/sc/Scarab 你是否曾经因为空洞骑士模组安装的复杂流程而头疼?是否在寻找依…...
嵌入式Linux C++开发框架AppKit实战解析
1. 嵌入式Linux C开发框架AppKit深度解析在嵌入式Linux开发领域,C开发者经常面临一个尴尬局面:标准库功能有限,而ROS等框架又过于庞大。AppKit框架正是为解决这一痛点而生,它提供了恰到好处的中间层抽象。我在多个工业控制项目中实…...
别再手动测试了!教你用ThinkPHP6+Workerman/MQTT搭建一个本地MQTT消息调试台
基于ThinkPHP6与Workerman/MQTT构建物联网调试平台的完整指南 物联网开发中,MQTT协议因其轻量级和高效性成为设备通信的首选方案。但调试MQTT消息往往依赖命令行工具或第三方平台,效率低下且缺乏灵活性。本文将展示如何利用ThinkPHP6框架配合Workerman/M…...
