Vscode调试C的多文件工程配置

关于Vscode的C语言的单文件调试,可以参见VScode调试C语言的设置(win10,Linux),里面已经说明基本的配置和使用。

下面说明一下如何调试多个文件的工程,首先写一个简单的工程,其中工程目录如下图1所示。

​图1 工程目录结构

文件的结构也特别简单,就是在每一个文件夹下放置两个文件,一个为xxx.c的文件,一个为xxx.h的文件,这么存放文件的好处就是:结构比较清楚,对于已经完成的demo文件,也更加方便移植。

首先,对于add.c,内容如下

#include "sub.h"

int sub(int a, int b)
{
    return a + b;
}

对于add.h文件,内容如下

#ifndef __ADD_H__
#define __ADD_H__


int add(int a, int b);

#endif

对于其他的几个文件,都是按照这种形式编写,只不过完成的就是简单的加减乘除的功能。

关于main.c的内容

#include "stdio.h"
#include "./add/add.h"
#include "./sub/sub.h"
#include "./mul/mul.h"
#include "./dev/dev.h"

int main(int argc, const char **argv)
{
    int a = 10, b = 2;

    printf("a + b = %d\r\n", add(a, b));
    printf("a - b = %d\r\n", sub(a, b));
    printf("a * b = %d\r\n", mul(a, b));
    printf("a / b = %d\r\n", dev(a, b));
    
    getchar();
    
    return 0;
}
就上面的工程,在win10下选择调试之后,出现效果如图2所示。
​图2 win10下调试的效果

在Linux系统下(ubuntu),调试的效果如图3所示。

​图3 Linux(Ubuntu)下的调试的效果

效果已经看到了,那么下面,简单说明一下调试的配置文件了。

1、launch.json文件可以详见点我!点我!就是我!

2、tasks.json文件

根据GCC编译的参数的选择,我们在实际的编译过程需要将main.c中包含的xxx.h文件和xxx.c源文件包含到GCC的编译参数中,即:

​图4 Vscode中命令编译示意

那么,在tasks.json中关于GCC编译的参数可以这样写:

{
    "version": "2.0.0",
    "tasks": [
        {
            "label": "Build", // 任务名称,与launch.json的preLaunchTask相对应
            "command": "gcc", // 要使用的编译器
            "args": [
                "${file}", //在哪个文件的视图上选择仿真,则选择哪个文件
                "${fileDirname}/add/add.c",
                "${fileDirname}/sub/sub.c",
                "${fileDirname}/mul/mul.c",
                "${fileDirname}/dev/dev.c",  
                "-o", // 指定输出文件名,不加该参数则默认输出a.exe,Linux下默认a.out
                "${fileDirname}/${fileBasenameNoExtension}.exe",//选择输出的文件名称,和前面的${file}是对应的,一般默认的名称就是前面的${file}.exe
                "-g", // 生成和调试有关的信息
                "-Wall", // 开启额外警告
            ], // 编译命令参数
            "type": "shell", // 可以为shell或process,前者相当于先打开shell再输入命令,后者是直接运行命令
            "group": {
                "kind": "build",
                "isDefault": true // 设为false可做到一个tasks.json配置多个编译指令,需要自己修改本文件
            },
            "presentation": {
                "echo": true,
                "reveal": "always", // 在“终端”中显示编译信息的策略,可以为always,silent,never。具体参见VSC的文档
                "focus": false, // 设为true后可以使执行task时焦点聚集在终端
                "panel": "shared" // 不同的文件的编译信息共享一个终端面板
            },
        }
    ]
}

可以看到,在开始调试时候(win10环境下),在终端会打印出编译的命令,如图5所示。

​图5 终端打印的信息 

如果按照上述的的tasks.json配置完成后,还不能够正常调试。则可以按照在终端打印出来的信息来编辑tasks.json中下面的这些信息:

"${fileDirname}/add/add.c",
"${fileDirname}/sub/sub.c",
"${fileDirname}/mul/mul.c",
"${fileDirname}/dev/dev.c",      

 

 

posted @ 2019-04-18 13:05  我就叫宋帅呀  阅读(13841)  评论(0编辑  收藏  举报