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中完成。

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

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

相关文章

系统思考—持续修炼

昨天每周一下午的学习实验室&#xff0c;大家聊到“知行合一”&#xff0c;不禁感慨&#xff1a;人生其实就是一场修炼。就像我们分享的《第五项修炼》和《系统思考》的方法论&#xff0c;不仅仅是传授给他人&#xff0c;更是我们自己持续在实践的过程。 上周&#xff0c;庄老…

Android Studio、JDK、AGP、Gradle、kotlin-gradle-plugin 兼容性问题

文章目录 问题&#xff1a;解决办法&#xff1a;gradle与 java的版本兼容AGP与Gradle的版本兼容kotlin 与 jvm 的版本兼容KGP、Gradle、AGP兼容关系kotlin 与 java 的编译版本配置 问题&#xff1a; 你从githb上clone了一个项目&#xff0c;本地跑的时候&#xff0c;各种报错。…

Linux文件属性 --- 七种文件类型---文件.目录、软硬链接、字符设备文件

目录 七种文件类型 1、普通文件和目录 2、链接文件 2.1硬链接 2.2软链接 3、字符设备文件 一、七种文件类型 Linux的文件属性中一共有以下七种类型 &#xff1a; 符号类型含义解释-普通文件纯文本文件&#xff08;ASCII&#xff09;和二进制文件&#xff08;binary&#xff…

【WPF】把DockPanel的内容生成图像

要在WPF中将一个 DockPanel 的内容生成为图像并保存&#xff0c;可以按照与之前类似的步骤进行&#xff0c;但这次我们将专注于 DockPanel 控件而不是整个窗口。 DockPanel的使用 WPF&#xff08;Windows Presentation Foundation&#xff09;中的 DockPanel 是一种布局控件&…

Linux DNS 协议概述

1. DNS 概述 互联网中&#xff0c;一台计算机与其他计算机通信时&#xff0c;通过 IP 地址唯一的标志自己。此时的 IP 地址就类似于我们日常生活中的电话号码。但是&#xff0c;这种纯数字的标识是比较难记忆的&#xff0c;而且数量也比较庞大。例如&#xff0c;每个 IPv4 地址…

cursor的composer功能

1、对project概括 这个项目是关于什么&#xff1f; what is this project about? 网友表示&#xff1a;「带有 Cursor Agent 的 Cursor 0.43.3 太疯狂了。」

C++中类和对象的细节原理

文章目录 一、C中的构造函数二、C中的析构函数三、两者的配合与注意事项四、C中的静态成员变量五、C中的静态成员函数六、C中普通成员函数和静态成员函数的区别七、C中的const成员变量八、C中的const 成员函数九、C中构造函数的初始化列表十、C中的浅拷贝操作十一、C中的深拷贝…

vue CSS 自定义宽高 翻页 剥离 效果

新增需求&#xff0c;客户需要类似PPT的剥离效果用于WEB页面翻页&#xff0c;查找资料后&#xff0c;参考下方的掘金博主的文章&#xff0c;并将HTML修改成vue的页面进行使用。其中宽度、高度改成了变量&#xff0c;样式style中的属性与宽高的关系整理成了公式进行动态计算。 …

拿到小米 Offer,却迷茫了。。

大家好&#xff0c;我是程序员鱼皮&#xff0c;12 月了&#xff0c;很多小伙伴也拿到了秋招的 Offer&#xff08;没拿到也不要灰心&#xff09;&#xff0c;但即使拿到 Offer&#xff0c;可能还会有一些其他的顾虑。今天分享我们编程导航一位鱼友的提问&#xff0c;给大家作为学…

transformer学习笔记-自注意力机制(2)

经过上一篇transformer学习笔记-自注意力机制&#xff08;1&#xff09;原理学习&#xff0c;这一篇对其中的几个关键知识点代码演示&#xff1a; 1、整体qkv注意力计算 先来个最简单未经变换的QKV处理&#xff1a; import torch Q torch.tensor([[3.0, 3.0,0.0],[0.5, 4…

Leecode刷题C++之形成目标字符串需要的最少字符串数①

执行结果:通过 执行用时和内存消耗如下&#xff1a; 代码如下&#xff1a; class Solution { public:int minValidStrings(vector<string>& words, string target) {auto prefix_function [](const string& word, const string& target) -> vector<…

CompletableFuture异步业务 默认ForkJoinPool 导致类加载器加载类失败

目录 1、Bug案发现场 2、捉虫过程过程 3、解决方案与代码 4、成果展现与总结 ​编辑 5、参考文章 1、Bug案发现场 最近参与帮助以前同事实际业务开发中业务&#xff0c;在一个业务场景之中&#xff1b;使用H5页面通过二维码收集小微企业/个体工商户贷款业务需求。其中在获…

mybatis-plus超详细讲解

mybatis-plus &#xff08;简化代码神器&#xff09; 地址&#xff1a;https://mp.baomidou.com/ 目录 mybatis-plus 简介 特性 支持数据库 参与贡献 快速指南 1、创建数据库 mybatis_plus 2、导入相关的依赖 3、创建对应的文件夹 4、编写配置文件 5、编写代码 …

Houdini abc 导入 maya uv无法识别

参考&#xff1a;Houdini导出abc 至maya UV 无法识别_houdini导出abc没有uv-CSDN博客 从maya导入到houdini的uv默认是vertex层级的&#xff0c;而在maya中&#xff0c;uv是在point层级的&#xff1b;因此在houdini中导出abc时应将uv转为点层级&#xff0c;使用vertexsplit节点&…

2025erp系统开源免费进销存系统搭建教程/功能介绍/上线即可运营软件平台源码

系统介绍 基于ThinkPHP与LayUI构建的全方位进销存解决方案 本系统集成了采购、销售、零售、多仓库管理、财务管理等核心功能模块&#xff0c;旨在为企业提供一站式进销存管理体验。借助详尽的报表分析和灵活的设置选项&#xff0c;企业可实现精细化管理&#xff0c;提升运营效…

半导体数据分析(二):徒手玩转STDF格式文件 -- 码农切入半导体系列

一、概述 在上一篇文章中&#xff0c;我们一起学习了STDF格式的文件&#xff0c;知道了这是半导体测试数据的标准格式文件。也解释了为什么码农掌握了STDF文件之后&#xff0c;好比掌握了切入半导体行业的金钥匙。 从今天开始&#xff0c;我们一起来一步步地学习如何解构、熟…

OCR:文字识别

使用场景: 远程身份认证 自动识别录入用户身份/企业资质信息&#xff0c;应用于金融、政务、保险、电商、直播等场景&#xff0c;对用户、商家、主播进行实名身份认证&#xff0c;有效降低用户输入成本&#xff0c;控制业务风险 文档电子化 识别提取各类办公文档、合同文件、企…

深入C语言文件操作:从库函数到系统调用

引言 文件操作是编程中不可或缺的一部分&#xff0c;尤其在C语言中&#xff0c;文件操作不仅是处理数据的基本手段&#xff0c;也是连接程序与外部世界的重要桥梁。C语言提供了丰富的库函数来处理文件&#xff0c;如 fopen、fclose、fread、fwrite 等。然而&#xff0c;这些库…

linux上qt打包(二)

sudo apt install git 新建一个文件夹 名为xiazai&#xff0c; chmod -R 777 xiazai cd xiazai 并进入这个文件夹&#xff0c;然后clone git clone https://github.com/probonopd/linuxdeployqt.git 此处可能要fanQiang才能下 cd linuxdeployqt文件夹 下载平台需要的…

Windos中解决redis-server.exe闪退问题

一、闪退原因 &#xff08;一&#xff09;数据状态异常 数据不一致 在 Redis 运行过程中&#xff0c;如果发生意外情况&#xff0c;如突然断电、系统崩溃或者不正确的操作&#xff0c;可能会导致数据在内存中的存储状态不一致。例如&#xff0c;Redis 使用多种数据结构&#x…