Vscode搭建C语言多文件开发环境
一、文章内容简介
本文介绍了 “Vscode搭建C语言多文件开发环境”需要用到的软件,以及vscode必备插件,最后多文件编译时tasks.json文件和launch.json文件的配置。即目录顺序。由于内容较多,建议大家在阅读时使用电脑阅读,按照目录来看。
二、前提需要安装软件
①vscode,安装简单,百度一下
②Mingw64,这是windows下的gcc编译和调试工具,免安装,下载解压即可。资源如下博主有:
MinGW-w64 10.0.0 + GCC 12百度云盘下载_mingw-w64 gcc百度云盘-CSDN博客
三、vscode插件配置
安装好vscode之后,必须安装C/C++插件,才能识别.c文件,安装Chinese (Simplified)汉化。
四、tasks.json文件和launch.json文件配置
这两个文件的作用,在此处提前介绍,在五、举例测试中会用到,在此处看明白了文件作用,便于在五中用到时,直接使用。
1.tasks.json文件配置
tasks.json是指定编译器gcc路径,需要编译的.c文件,以及编译后生成的可执行exe文件
Vscode默认配置如下:编译一个.c文件时,不需要修改,如果需要编译多个文件,就需要修改。
单一文件编译,即vscode默认,配置如下:
{"tasks": [{"type": "cppbuild","label": "C/C++: gcc.exe 生成活动文件","command": "C:\\mingw64\\bin\\gcc.exe",//gcc编译器路径"args": ["-fdiagnostics-color=always","-g","${file}",//需要编译的文件,${file}指当前.c文件,多文件时此处需要修改"-o","${fileDirname}\\${fileBasenameNoExtension}.exe",//编译后生成的可执行文件,此处是和当前.c文件同名的.exe文件。""],"options": {"cwd": "C://mingw64//bin/"},"problemMatcher": ["$gcc"],"group": {"kind": "build","isDefault": true},"detail": "调试器生成的任务。"}],"version": "2.0.0"
}
多文件编译,修改后配置如下: 配置成编译当前文件夹下所有.c文件,并生成a.exe可执行文件。
{"tasks": [{"type": "cppbuild","label": "C/C++: gcc.exe 生成活动文件","command": "C:\\mingw64\\bin\\gcc.exe",//安装的gcc路径,我的解压后是放在c盘根目录下"args": ["-fdiagnostics-color=always","-g",// "${file}","${fileDirname}\\*.c",//编译当前目录下,所有的.c文件// "${fileDirname}\\test.c",//编译当前目录下test.c文件,这种是指定编译哪一个,为了方便,直接编译所有,选上面一种"-o",// "${fileDirname}\\${fileBasenameNoExtension}.exe","${fileDirname}\\a.exe",//由于是多文件,编译后生成的可执行文件名为a.exe,这个名字再launch.json中要用""],"options": {"cwd": "C://mingw64//bin/"},"problemMatcher": ["$gcc"],"group": {"kind": "build","isDefault": true},"detail": "调试器生成的任务。"}],"version": "2.0.0"
}
2.launch.json文件配置
launch.json是调试配置文件,需要指定要调试的exe文件,指定调试器gdb的路径。
单一文件 ,vscode默认配置如下:
{"version": "0.2.0","configurations": [{"name": "C/C++ Runner: Debug Session","type": "cppdbg","request": "launch","args": [],"stopAtEntry": false,"externalConsole": false,"cwd": "c:/Users/Xiasir/Desktop/error","program": "${fileDirname}\\${fileBasenameNoExtension}.exe",//tasks.json生成的单一文件的可执行文件"MIMode": "gdb","miDebuggerPath": "C:\\mingw64\\bin\\gdb.exe",//gdb执行路径"setupCommands": [{"description": "Enable pretty-printing for gdb","text": "-enable-pretty-printing","ignoreFailures": true}]}]
}
多文件调试,配置如下:
{"version": "0.2.0","configurations": [{"name": "C/C++ Runner: Debug Session","type": "cppdbg","request": "launch","args": [],"stopAtEntry": false,"externalConsole": true,//使用内部控制台"cwd": "c:/Users/Xiasir/Desktop/error",// "program": "${fileDirname}\\${fileBasenameNoExtension}.exe","program": "${fileDirname}\\a.exe",//在tasks.json中生成的可执行文件a.exe,a是可执行文件名,由我们自己定义"MIMode": "gdb","miDebuggerPath": "C:\\mingw64\\bin\\gdb.exe",//调试器gdb的执行路径,我的mingw64安装在C盘,根据你自己的确定"setupCommands": [{"description": "Enable pretty-printing for gdb","text": "-enable-pretty-printing","ignoreFailures": true}]}]
}
五、举例测试
1.建立文件夹 和 多个.c文件
在桌面新建文件夹,命名为test_vscode,并建立main.c和test.c和test.h两个文件。如下图所示:
2.使用vscode打开文件夹
点击test_vscode文件夹,右键,使用vscode打开
3.编辑代码
①main.c代码如下:
#include <stdio.h>
#include "test1.h"int main(void)
{printf("hello world\r\n");test();//此函数在test1.c中实现,在test1.h中声明return 0;
}
②test1.c代码如下:
#include "test1.h"
#include <stdio.h>void test(void)
{printf("this is test\r\n");}
③test1.h代码如下:
void test(void);
④配置标题四的的task.json文化和launc.json文件
此时大家按下F5或者Ctrl+F5会发现,会报错,程序不会被执行
点击打开launch.json文件,此时界面如下:
会发现,在图上左边.json文件下没有tasks.json文件,在launch.json中也没有gdb执行路径和可执行文件路径。此时我们需要生成tasks.json文件并修改,然后修改launch.json文件。
1.生成task.json文件
点击终端--->配置--->使用模板创建tasks.json文件-->others
此时左边.json文件夹下有了tasks.json文件,以及tasks.json中如下。默认的比较简单,也和第四步有点不一样,我们直接复制第四步的tasks.json多文件下的配置。
即:tasks.json改为如下配置:
{"tasks": [{"type": "cppbuild","label": "C/C++: gcc.exe 生成活动文件","command": "C:\\mingw64\\bin\\gcc.exe",//安装的gcc路径,我的解压后是放在c盘根目录下"args": ["-fdiagnostics-color=always","-g",// "${file}","${fileDirname}\\*.c",//编译当前目录下,所有的.c文件// "${fileDirname}\\test.c",//编译当前目录下test.c文件,这种是指定编译哪一个,为了方便,直接编译所有,选上面一种"-o",// "${fileDirname}\\${fileBasenameNoExtension}.exe","${fileDirname}\\a.exe",//由于是多文件,编译后生成的可执行文件名为a.exe,这个名字再launch.json中要用""],"options": {"cwd": "C://mingw64//bin/"},"problemMatcher": ["$gcc"],"group": {"kind": "build","isDefault": true},"detail": "调试器生成的任务。"}],"version": "2.0.0"
}
2.修改launch.json:
复制第四步的launch.json多文件下:
{"version": "0.2.0","configurations": [{"name": "C/C++ Runner: Debug Session","type": "cppdbg","request": "launch","args": [],"stopAtEntry": false,"externalConsole": false,//如果想使用外部控制台,改为true即可"cwd": "c:/Users/Xiasir/Desktop/error",// "program": "${fileDirname}\\${fileBasenameNoExtension}.exe","program": "${fileDirname}\\a.exe",//在tasks.json中生成的可执行文件a.exe,a是可执行文件名,由我们自己定义"MIMode": "gdb","miDebuggerPath": "C:\\mingw64\\bin\\gdb.exe",//调试器gdb的执行路径,我的mingw64安装在C盘,根据你自己的确定"setupCommands": [{"description": "Enable pretty-printing for gdb","text": "-enable-pretty-printing","ignoreFailures": true}]}]
}
⑤编译代码
配置完tasks.json和launch.json文件后,此时按下F5,仍然没法调试,会报错如下:
报错找不到launch.json文件中的可执行文件a.exe。
因为编译器此时并没有进行编译,F5是调试,此时并没有编译。所以得先编译一次,生成可执行文件a.exe。
1.生成可执行文件a.exe
此时点击 终端->运行生成任务,也可按快捷键ctrl+shift+b生成可执行文件a.exe
2.运行可执行文件a.exe
执行方式一:此时再按下F5,就会顺利执行a.exe文件,执行结果如下:
执行方式二:在vscode内置终端下,输入命令.\a.exe也可执行。
六、总结
通过这一篇文章看下来,会觉得vscdoe配置起来非常的麻烦,确实不如集成开发环境好用,但是vscode这主题很舒服,看着方便。折腾下来,发现配置也是按照代码编译原理的逻辑来配置的。
首先是程序员编写代码,然后调用编译器gcc编译成可执行文件,最后调试时调用gdb进行调试。
1.因此在编译时需要指定:需要编译的源文件,gcc的位置,编译后生成的可执行文件名,tasks.json中完成。
2.在调试时需要指定:可执行文件名,调试器gdb的路径。在launch.json中完成。
相关文章:

Vscode搭建C语言多文件开发环境
一、文章内容简介 本文介绍了 “Vscode搭建C语言多文件开发环境”需要用到的软件,以及vscode必备插件,最后多文件编译时tasks.json文件和launch.json文件的配置。即目录顺序。由于内容较多,建议大家在阅读时使用电脑阅读,按照目录…...
自定义 C++ 编译器的调用与管理
在 C 项目中,常常需要自动化地管理编译流程,例如使用 MinGW 或 Visual Studio 编译器进行代码的编译和链接。为了方便管理不同编译器和简化编译流程,我们开发了一个 CompilerManager 类,用于抽象编译器的查找、命令生成以及执行。…...

时间管理系统|Java|SSM|JSP|
【技术栈】 1⃣️:架构: B/S、MVC 2⃣️:系统环境:Windowsh/Mac 3⃣️:开发环境:IDEA、JDK1.8、Maven、Mysql5.7 4⃣️:技术栈:Java、Mysql、SSM、Mybatis-Plus、JSP、jquery,html 5⃣️数据库可…...
用SparkSQL和PySpark完成按时间字段顺序将字符串字段中的值组合在一起分组显示
用SparkSQL和PySpark完成以下数据转换。 源数据: userid,page_name,visit_time 1,A,2021-2-1 2,B,2024-1-1 1,C,2020-5-4 2,D,2028-9-1 目的数据: user_id,page_name_path 1,C->A 2,B->D PySpark: from pyspark.sql import SparkSes…...

Sentinel 学习笔记3-责任链与工作流程
本文属于sentinel学习笔记系列。网上看到吴就业老师的专栏,原文地址如下: https://blog.csdn.net/baidu_28523317/category_10400605.html 上一篇梳理了概念与核心类:Sentinel 学习笔记2- 概念与核心类介绍-CSDN博客 补一个点:…...

Latex 转换为 Word(使用GrindEQ )(英文转中文,毕业论文)
效果预览 第一步: 告诉chatgpt: 将latex格式中的英文翻译为中文(符号和公式不要动),给出latex格式第二步: Latex 转换为 Word(使用GrindEQ ) 视频 https://www.bilibili.com/video/BV1f242…...
使用Chat-LangChain模块创建一个与用户交流的机器人
当然!要使用Chat-LangChain模块创建一个与用户交流的机器人,你需要安装并配置一些Python库。以下是一个基本的步骤指南和示例代码,帮助你快速上手。 安装依赖库 首先,你需要安装langchain库,它是一个高级框架&#x…...

国家认可的人工智能从业人员证书如何报考?
一、证书出台背景 为进一步贯彻落实中共中央印发《关于深化人才发展体制机制改革的意见》和国务院印发《关于“十四五”数字经济发展规划》等有关工作的部署要求,深入实施人才强国战略和创新驱动发展战略,加强全国数字化人才队伍建设,持续推…...
【网络云计算】2024第51周-每日【2024/12/17】小测-理论-解析
文章目录 1. 计算机网络有哪些分类2. 计算机网络中协议与标准的区别3. 计算机网络拓扑有哪些结构4. 常用的网络设备有哪些,分属于OSI的哪一层5. IEEE802局域网标准有哪些 【网络云计算】2024第51周-每日【2024/12/17】小测-理论-解析 1. 计算机网络有哪些分类 计算…...

每日十题八股-2024年12月19日
1.Bean注入和xml注入最终得到了相同的效果,它们在底层是怎样做的? 2.Spring给我们提供了很多扩展点,这些有了解吗? 3.MVC分层介绍一下? 4.了解SpringMVC的处理流程吗? 5.Handlermapping 和 handleradapter有…...

网络方案设计
一、网络方案设计目标 企业网络系统的构成 应用软件 计算平台 物理网络及拓扑结构 网络软件及工具软件 网络互连设备 广域网连接 无论是复杂的,还是简单的计算机网络,都包括了以下几个基本元素 : 应用软件----支持用户完成专门操作的软件。…...
学习记录:electron主进程与渲染进程直接的通信示例【开箱即用】
electron主进程与渲染进程直接的通信示例 1. 背景: electronvue实现桌面应用开发 2.异步模式 2.1使用.send 和.on的方式 preload.js中代码示例: const { contextBridge, ipcRenderer} require(electron);// 暴露通信接口 contextBridge.exposeInMa…...

【Java数据结构】ArrayList类
List接口 List是一个接口,它继承Collection接口,Collection接口中的一些常用方法 List也有一些常用的方法。List是一个接口,它并不能直接实例化,ArrayList和LinkedList都实现了List接口,它们的常用方法都很相似。 Ar…...

HDR视频技术之十:MPEG 及 VCEG 的 HDR 编码优化
与传统标准动态范围( SDR)视频相比,高动态范围( HDR)视频由于比特深度的增加提供了更加丰富的亮区细节和暗区细节。最新的显示技术通过清晰地再现 HDR 视频内容使得为用户提供身临其境的观看体验成为可能。面对目前日益…...

71 mysql 中 insert into ... on duplicate key update ... 的实现
前言 这个也是我们经常可能会使用到的相关的特殊语句 当插入数据存在 唯一索引 或者 主键索引 相关约束的时候, 如果存在 约束冲突, 则更新目标记录 这个处理是类似于 逻辑上的 save 操作 insert into tz_test_02 (field1, field2) values (field11, 11) on duplicate …...

计算机网络-GRE Over IPSec实验
一、概述 前情回顾:上次基于IPsec VPN的主模式进行了基础实验,但是很多高级特性没有涉及,如ike v2、不同传输模式、DPD检测、路由方式引入路由、野蛮模式等等,以后继续学习吧。 前面我们已经学习了GRE可以基于隧道口实现分支互联&…...

你的第一个博客-第一弹
使用 Flask 开发博客 Flask 是一个轻量级的 Web 框架,适合小型应用和学习项目。我们将通过 Flask 开发一个简单的博客系统,支持用户注册、登录、发布文章等功能。 步骤: 安装 Flask 和其他必要库: 在开发博客之前,首…...
若依启动项目时配置为 HTTPS 协议
文章目录 1、需求提出2、应用场景3、解决思路4、注意事项5、完整代码第一步:修改 vue.config.js 文件第二步:运行项目第三步:处理浏览器警告 6、运行结果 1、需求提出 在开发本地项目时,默认启动使用的是 HTTP 协议。但在某些测试…...

学习思考:一日三问(学习篇)之匹配VLAN
学习思考:一日三问(学习篇)之匹配VLAN 一、学了什么(是什么)1.1 理解LAN与"V"的LAN1.2 理解"V"的LAN怎么还原成LAN1.3 理解二层交换机眼中的"V"的LAN 二、为何会产生需求(为…...

[WiFi] WiFi 802.1x介绍及EAP认证流程整理
802.1X Wi-Fi 802.1X 是一种网络访问控制协议,常用于保护无线网络。它提供了一种基于端口的网络访问控制机制,主要用于在用户和网络之间建立安全的连接。以下是 802.1X 的一些关键特点: 认证框架 802.1X 使用 EAP(可扩展认证协议…...

Chapter03-Authentication vulnerabilities
文章目录 1. 身份验证简介1.1 What is authentication1.2 difference between authentication and authorization1.3 身份验证机制失效的原因1.4 身份验证机制失效的影响 2. 基于登录功能的漏洞2.1 密码爆破2.2 用户名枚举2.3 有缺陷的暴力破解防护2.3.1 如果用户登录尝试失败次…...
React Native 开发环境搭建(全平台详解)
React Native 开发环境搭建(全平台详解) 在开始使用 React Native 开发移动应用之前,正确设置开发环境是至关重要的一步。本文将为你提供一份全面的指南,涵盖 macOS 和 Windows 平台的配置步骤,如何在 Android 和 iOS…...
SciencePlots——绘制论文中的图片
文章目录 安装一、风格二、1 资源 安装 # 安装最新版 pip install githttps://github.com/garrettj403/SciencePlots.git# 安装稳定版 pip install SciencePlots一、风格 简单好用的深度学习论文绘图专用工具包–Science Plot 二、 1 资源 论文绘图神器来了:一行…...

MongoDB学习和应用(高效的非关系型数据库)
一丶 MongoDB简介 对于社交类软件的功能,我们需要对它的功能特点进行分析: 数据量会随着用户数增大而增大读多写少价值较低非好友看不到其动态信息地理位置的查询… 针对以上特点进行分析各大存储工具: mysql:关系型数据库&am…...

Redis相关知识总结(缓存雪崩,缓存穿透,缓存击穿,Redis实现分布式锁,如何保持数据库和缓存一致)
文章目录 1.什么是Redis?2.为什么要使用redis作为mysql的缓存?3.什么是缓存雪崩、缓存穿透、缓存击穿?3.1缓存雪崩3.1.1 大量缓存同时过期3.1.2 Redis宕机 3.2 缓存击穿3.3 缓存穿透3.4 总结 4. 数据库和缓存如何保持一致性5. Redis实现分布式…...
服务器硬防的应用场景都有哪些?
服务器硬防是指一种通过硬件设备层面的安全措施来防御服务器系统受到网络攻击的方式,避免服务器受到各种恶意攻击和网络威胁,那么,服务器硬防通常都会应用在哪些场景当中呢? 硬防服务器中一般会配备入侵检测系统和预防系统&#x…...

基于当前项目通过npm包形式暴露公共组件
1.package.sjon文件配置 其中xh-flowable就是暴露出去的npm包名 2.创建tpyes文件夹,并新增内容 3.创建package文件夹...

[10-3]软件I2C读写MPU6050 江协科技学习笔记(16个知识点)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16...

mysql已经安装,但是通过rpm -q 没有找mysql相关的已安装包
文章目录 现象:mysql已经安装,但是通过rpm -q 没有找mysql相关的已安装包遇到 rpm 命令找不到已经安装的 MySQL 包时,可能是因为以下几个原因:1.MySQL 不是通过 RPM 包安装的2.RPM 数据库损坏3.使用了不同的包名或路径4.使用其他包…...

Docker 本地安装 mysql 数据库
Docker: Accelerated Container Application Development 下载对应操作系统版本的 docker ;并安装。 基础操作不再赘述。 打开 macOS 终端,开始 docker 安装mysql之旅 第一步 docker search mysql 》〉docker search mysql NAME DE…...