VS Code编译编译C代码的另一种方法

关注+星标公众,不错过精彩内容

054b668d69f55946152e606413db6845.gif

来源 | 知晓编程

首先说明的是vscode是代码编辑器,并不是编译器,它本身并不能编译C语言。

在这里我们使用的是MinGW-w64作为C语言的编译器。MinGW-w64的前身是MinGW的全称是:Minimalist GNU on Windows

它实际上是将经典的开源 C语言 编译器 GCC 移植到了 Windows 平台下,并且包含了 Win32API ,因此可以将源代码编译为可在 Windows 中运行的可执行程序。

而且还可以使用一些 Windows 不具备的,Linux平台下的开发工具。一句话来概括:MinGW 就是 GCC 的 Windows 版本 。

1、下载安装MinGW

我们这里使用的MinGW-w64是MinGW的升级版,MinGW只能编译32位程序,而MinGW-w64可以编译64位和32位程序。MinGW已经停止更新了,所以大家还是要使用MinGW-w64。

MinGW-w64推荐去官网下载:https://sourceforge.net/projects/mingw-w64/files/mingw-w64/

b63d7144d98a2e4895ddb0705fd627a4.png

1:下载绿色版,下载速度快

2:下载windows的安装版,容易下载失败

所以演示绿色版的安装过程,绿色版只是需要添加环境变量,将绿色版解压到D盘根目录,如下

49e6e8036771144506fd7c0d52ce0042.png

按步骤添加环境变量

f95a1fe6a2db14e45303a13a8cb6541a.png

测试MinGW-w64是否安装完毕

7a4f2785cc21e421c17cb18ace248cb1.png

2、编译C代码

下面将用MinGW-w64编译C代码,正如上文所说MinGW-w64就是gcc的windows版,所以直接就是gcc编译C代码。在D盘新建目录C,并在目录C中新建main.c文件,代码如下

#include <stdio.h>
#include <AclAPI.h>
int main(){
   char name[100];
   printf("What is your name?\n");
   scanf("%s",name);
   printf("Hello,%s,nice to meet you!\n",name);   
}

这就是一个简单C程序。下面使用window的cmd编译并运行这个C程序。

6a5d8082fcaa39b2d3aadfa122fddcb5.png

使用windows的powershell编译也是一样的结果

71d8a586b896c640db951650ae49d04e.png

3、vscode编译

上面演示了如何使用MinGW-w64编译C代码,vscode只需要调用这些命令就可以编译C代码,那么vscode的插件就可以优雅的解决这个问题,code runner是一款优秀的编译插件。

a2ead7a025867469440a2c167571f1d1.png

因为我们的C代码使用了scanf,需要在终端输入所以需要使能code runner的Run In Terminal功能。

dfa99e042a887bdb3cca632561ac0a19.png

安装了这款插件,在右侧会出现一个运行按钮

d17fdb08c1f2052552c6c24959c09e3f.png

点击这个运行按钮,就能编译并运行这个C代码。注意看下图1处,其实就是调用gcc的命令,和我们上面讲的一样。

368253d22b620cf16fb6ff754b5ba4a3.png

类似的插件还有C/C++ Compile Run插件。

37aff3a0760daaac27cf647b9ee2d0de.png

离开插件就不能编译???vscode当然可以自己调用gcc,自己完成代码的编译,选择运行->以非调试模式运行。这里我们只是编译C代码,然后运行,debug调试的问题,下面再说。

5d8808df3eba53a254ca2241684489e8.png

依次选择C++(GDB/LLDB)和C/C++: gcc.exe 生成活动文件

6b99a91b3297c9d099a294635853f9f8.png

看到终端输出如下(下图我将两个终端并排显示,默认不是这样显示的)

d8536ed716b9e1ab37b148a65b69b793.png

这里可以看到,vscode运行了两个终端,一个编译C语言,一个运行C程序。并且产生了两个文件如下

46a5265d25b0ec35e819155cca6ab2b7.png

launch.json作用是在C语言文件启动调试时提供配置参数

tasks.json是一个任务,用于编译C语言的

关于报错,下面制造了一个简单的错误,在终端中给出了出错的位置,这是gcc给出的错误,也就是导致编译不过的错误。

73d06870b9e57d06685d43d4e8b2ff47.png

但下图的错误,是vscode认为你有错误,给你提示的,不是所有vscode报的错误gcc都会认为有问题的。并且vscode给出的错误一般与安装的插件有关。我们重点看gcc的错误。

0134af903f2f04026c6af0d410caee92.png

4、多文件编译

上面已经完成了C的编译和运行,但只是一个文件,正常情况下一般会有多个文件。

我们有以下源码来验证多文件编译。

//main.c
#include<stdio.h>
#include "a.h"
int main(void) {
    int number;
    printf("input:\n");
    scanf("%d", &number);
    printHello();
    if((number > 1) && (number <= 100)) {
        printf("Small\n");
    } else if((number > 101) && (number <= 200)) {
        printf("Middle\n");
    } else {
        printf("Large\n");
    }
    return 0;
}


//a.c
#include<stdio.h>
#include "a.h"


void printHello(void) {
    printf("Hello world");
}




//a.h
#ifndef __A_H_
#define __A_H_


void printHello(void);


#endif

首先使用code runner,运行结果如下

dcb53b152f1abde6dcedf6caa0ac5697.png

可以看出,code runner只编译main.c,编译报错找不到a.c中的printHello函数。

修改code runner的扩展配置Excutor Map,单击前面的小齿轮,选择:将设置复制为JSON文本

cc6d11d4a82eba4f293834a00cf52b0a.png

然后单击在settings.json中编辑

37d0ad6fa2f3ac210a081d959e8f6212.png

打开文件如下settings.json

991dc4026db64e0ad5b36ecc10846b48.png

其中的一句代码是我们配置使能runInTerminal的,将我们刚刚复制的粘贴到它的下一行

bbf30eb961f63f15deff839c6f4a4ec4.png

注意1处需要添加一个逗号,并将2处的$fileName修改为*.c,如下

f20bd1981339325767bffac79a7e59e4.png

保存文件,返回main.c,执行code cunner的运行按钮,可以看到执行gcc的编译时,编译所有的c源文件。

59c1df1b721c737aad5c10c7082ce296.png

看到这里,大家应该就理解了配置文件和执行的gcc命令之间的关系了。

对于上文提到的vscode自己也可以编译的问题,不使用插件如何编译多个文件?上文提到task.json是编译C程序的,它的配置如下

a74a19d0cc10004e442f52f2cd796e85.png

同理将1处的${file}修改为*.c就可以编译多个C文件了。这里就不再演示了。

5、调试

调试是很简单的,在调试之前需要保证编译时没有问题的(虽然这句话像是废话)在其他IDE中你可以直接debug调试,但在VScode中,建议你先编译,首选保证编译过了。因为vsode的编译环境是配置的,可能出现问题,如果编译不通过那就更不能调试了。

编译通过的程序,选中main.c直接选择运行->启动调试。

8b17c1e95824be00bba899b6d04fb796.png

剩下的就和普通的IDE没有大的差异了

f8a6de307d820e3ad629b353dee2d8ac.png

1:自动查看变量

2:手动查看变量

3:调用的堆栈信息

4:可以和其他IDE一样打断点

5:分别是运行,单步,进入函数,跳出函数,复位,停止等常见的调试按钮

6:终端交互界面

声明:本文素材来源网络,版权归原作者所有。如涉及作品版权问题,请与我联系删除。

------------ END ------------

2667d9c145412305b7259b6d1511ef0e.gif

●专栏《嵌入式工具

●专栏《嵌入式开发》

●专栏《Keil教程》

●嵌入式专栏精选教程

关注公众号回复“加群”按规则加入技术交流群,回复“1024”查看更多内容。

231c88bbba65715361a49d4cd16cb766.jpeg

5d4d5bc1b60cd1e61eb6a1978ccf5755.png

点击“阅读原文”查看更多分享。

  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值