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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

解决并发情况下调用 Instruct-pix2pix 模型推理错误:index out of bounds 问题

解决并发情况下调用 Instruct-pix2pix 模型推理错误&#xff1a;index out of bounds 问题 背景介绍 在对 golang 开发的 图像生成网站 进行并发测试时&#xff0c;调用基于 Instruct-pix2pix 模型和 FastAPI 的图像生成 API 遇到了以下错误&#xff1a; Model inference er…

ARM Linux 虚拟环境搭建

一、目标 在没有arm硬件的情况下&#xff0c;使用QEMU模拟器&#xff0c;在PC上模拟一块ARM开发板&#xff0c;对ARM Linux进行学习。 二、搭建步骤 首先先有一个Linux 开发环境&#xff0c;我目前使用的是Ubuntu20. 首先安装qemu&#xff0c;qemu的官网&#xff1a;https:…

百度2020校招Web前端工程师笔试卷(第二批)

百度2020校招Web前端工程师笔试卷&#xff08;第二批&#xff09; 2024/12/17 1.FIFO为先进先出的顺序来完成页面的访问&#xff0c;而如果在采用先进先出页面淘汰算法的系统中&#xff0c;一进程在内存占3块&#xff08;开始为空&#xff09;&#xff0c;页面访问序列为1、2、…

java--抽象类(abstract)和接口(interface)

一.抽象类(abstract) 1.概念: 当父类中的一些方法不能确定实现的具体功能时,可以用abstract关键字来修饰该方法,此时,该方法就是抽象方法,该方法不需要实现方法体.可由其子类实现父类的抽象方法, abstruct不能用来修饰属性, 用abstract修饰的类叫做抽象类 // 抽象类&#x…

Web 毕设篇-适合小白、初级入门练手的 Spring Boot Web 毕业设计项目:教室信息管理系统(前后端源码 + 数据库 sql 脚本)

&#x1f525;博客主页&#xff1a; 【小扳_-CSDN博客】 ❤感谢大家点赞&#x1f44d;收藏⭐评论✍ 1.0 项目介绍 开发工具&#xff1a;IDEA、VScode 服务器&#xff1a;Tomcat&#xff0c; JDK 17 项目构建&#xff1a;maven 数据库&#xff1a;mysql 8.0 系统用户前台和管理…

Qt之修改窗口标题、图标以及自定义标题栏(九)

Qt开发 系列文章 - titles-icons-titlebars&#xff08;九&#xff09; 目录 前言 一、修改标题 二、添加图标 三、更换标题栏 1.效果演示 2.创建标题栏类 3.定义相关函数 4.使用标题栏类 总结 前言 在我们利用Qt设计软件时&#xff0c;经常需要修改窗口标题、更改软…

JumpServer开源堡垒机搭建及使用

目录 一,产品介绍 二,功能介绍 三,系统架构 3.1 应用架构 3.2 组件说明 3.3 逻辑架构 3.3 逻辑架构 四,linux单机部署及方式选择 4.1 操作系统要求(JumpServer-v3系列版本) 4.1.1 数据库 4.1.3创建数据库参考 4.2 在线安装 4.2.1 环境访问 4.3 基于docker容…

Pytorch | 从零构建GoogleNet对CIFAR10进行分类

Pytorch | 从零构建Vgg对CIFAR10进行分类 CIFAR10数据集GoogleNet网络结构特点网络整体架构特征图尺寸变化应用与影响 GoogleNet结构代码详解结构代码代码详解Inception 类初始化方法前向传播 forward GoogleNet 类初始化方法前向传播 forward 训练和测试训练代码train.py测试代…

简单了解一下 Go 语言的构建约束?

​构建约束是一种在 Go 语言中控制源文件编译条件的方法&#xff0c;它可以让您指定某些文件只在特定的操作系统、架构、编译器或 Go 版本下编译&#xff0c;而在其他环境中自动忽略。这样可以方便您针对不同的平台或场景编写不同的代码&#xff0c;实现条件编译的功能。 构建…

12.17双向链表,循环链表

循环单向链表 1.头文件test.h #ifndef __TEST_H_ #define __TEST_H_#include<stdio.h> #include<stdlib.h>typedef struct node {union{int len;int data;};struct node *next; }looplink,*looplinkPtr;//创建 looplinkPtr create();//判空 int empty(); //申请…

图的最小生成树(C++实现图【3】)

目录 1.最小生成树 1.1 Kruskal算法 代码部分 1.2 Prim算法 代码部分 1.最小生成树 连通图中的每一棵生成树&#xff0c;都是原图的一个极大无环子图&#xff0c;即&#xff1a;从其中删去任何一条边&#xff0c;生成树就不在连通&#xff1b;反之&#xff0c;在其中引入任何一…

解决电脑网速慢问题:硬件检查与软件设置指南

电脑网速慢是许多用户在使用过程中常见的问题&#xff0c;它不仅会降低工作效率&#xff0c;还可能影响娱乐体验。导致电脑网速慢的原因多种多样&#xff0c;包括硬件问题、软件设置和网络环境等。本文将从不同角度分析这些原因&#xff0c;并提供提高电脑网速的方法。 一、检查…

Python-基于Pygame的小游戏(贪吃蛇)(一)

前言:贪吃蛇是一款经典的电子游戏&#xff0c;最早可以追溯到1976年的街机游戏Blockade。随着诺基亚手机的普及&#xff0c;贪吃蛇游戏在1990年代变得广为人知。它是一款休闲益智类游戏&#xff0c;适合所有年龄段的玩家&#xff0c;其最初为单机模式&#xff0c;后来随着技术发…

MySQL表的增删改查(2)

1.数据库约束 1)约束类型 not null指定某列不能存储null值unique保证某列的每一行必须有唯一值default规定没有给列赋值时的默认值primary keynot null和unique的结合,一张表里只能有一个,作为身份标识的数据foreign key保证一个表的数据匹配另一个表中的值的参照完整性check…

职场人如何提升职业技能?

职场人如何提升职业技能&#xff1f; 在职场中&#xff0c;每个人都像是一名航行在广阔大海上的水手&#xff0c;面对着不断变化的风浪和挑战。要想在这片职场海洋中稳步前行&#xff0c;甚至脱颖而出&#xff0c;提升职业技能是必不可少的。那么&#xff0c;职场人究竟该如何…

IVE Model 2.0.2运行报错:Error launching application × could not locate Java runtime

在windows电脑上运行IVE Model 2.0.2程序的时候弹窗报错: could not locate Java runtime 一、原因分析 第一次安装的时候,很确定自己的JDK环境安装是没有问题,但是运行仍然会报错,由于软件没有说明使用什么版本的JDK只能挨个尝试,换了几个版本仍然不行,忽然想到,这个软…

模型训练篇 | 关于常见的10种数据标注工具介绍

前言:Hello大家好,我是小哥谈。数据标注工具是一种用于标记和分类数字图像、音频、视频或文本等数据集的工具。数据标注工具可以自动或手动标记数据集中的对象、人脸、物体、文字等,以便机器学习模型能够理解和识别这些数据。数据标注工具通常由开发者或数据标注团队开发和使…

Linux应用开发————mysql数据库

数据库概述 什么是数据库(database)? 数据库是一种数据管理的管理软件&#xff0c;它的作用是为了有效管理数据&#xff0c;形成一个尽可能无几余的数据集合&#xff0c;并能提供接口&#xff0c;方便用户使用。 数据库能用来干什么? 顾名思义&#xff0c;仓库就是用来保存东…

c++理解(三)

本文主要探讨c相关知识。 模板是对类型参数化 函数模板特化不是模板函数重载 allocator(空间配置器):内存开辟释放,对象构造析构 优先调用对象成员方法实现的运算符重载函数,其次全局作用域找 迭代器遍历访问元素,调用erase&#xff0c;insert方法后&#xff0c;当前位置到容器…

动态规划——最长公共子序列

文章目录 概要整体流程问题描述递推公式由来两个序列的最后一位相等两个序列的最后一位不等左图右图 表格填写dp 表格定义递推公式填表过程填表过程解析最终结果 小结 概要 动态规划相关知识 求解最长的公共子序列 整体流程 问题定义与区分&#xff1a;理解最长公共子串与最…