为 VSCode 配置 C 语言编译环境

1. 前提条件

安装 VSCode 以及 MinGW

安装好 VSCode 中的 C/C++ 扩展
[图片上传失败...(image-e93c7c-1606314000230)]

PS: 我建议使用 chocolatey 安装,这样可以自动配置好环境变量

运行下列命令检查是否已经配置好环境变量:

gcc --version
gdb --version

2. 配置 VSCode

2.1. 创建工作文件夹

打开 Windows 的 Command Prompt,运行下列命令:(建立一个叫 project 的文件夹,里面将会放置你的程序文件,然后建立一个叫 helloworld 的子文件夹,进到子文件夹,打开 VSCode )

mkdir projects
cd projects
mkdir helloworld
cd helloworld
code .

最后的 code . 命令会在当前文件夹打开 VSCode ,当前文件夹随即变成当前的 workspace

2.2. 创建C语言的源代码文件

点击创建新文件,命名为 helloworld.c

image

在源代码文件内输入:

#include <stdio.h>

int main() {
    printf("Hello World!\n");
    
    return 0;
}

保存源代码文件

2.3. 编译C语言的源代码

这一步我们需要创建一个 tasks.json 文件来告诉VSCode如何编译C语言的源代码。

在菜单中选择 Terminal > Configure Default Build Task 。随后会出现一个下拉菜单,里面会有 VSCode 预设的一些编译选项。我们这里选择 gcc.exe 这一项。

image

选中之后,VSCode 在当前工作文件夹下面的一个 .vscode 的文件夹中自动创建了一个 tasks.json 文件,文件内容看起来可能是这样的:

{
    "version": "2.0.0",
    "tasks": [
        {
            "type": "cppbuild",
            "label": "C/C++: gcc.exe build active file",
            "command": "C:\\ProgramData\\chocolatey\\bin\\gcc.exe",
            "args": [
                "-g",
                "${file}",
                "-o",
                "${fileDirname}\\${fileBasenameNoExtension}.exe"
            ],
            "options": {
                "cwd": "C:\\ProgramData\\chocolatey\\bin"
            },
            "problemMatcher": [
                "$gcc"
            ],
            "group": {
                "kind": "build",
                "isDefault": true
            },
            "detail": "compiler: C:\\ProgramData\\chocolatey\\bin\\gcc.exe"
        }
    ]
}

其中 commend 选项给出了具体执行编译任务的程序文件,在这里就是我们刚才选择的 gcc.exeargs 选项给出的是运行编译任务时传递给 gcc 的参数。

具体内容可以参考 Visual Studio Code Variables Reference

创建好 tasks.json 之后,我们可以进行编译了。在菜单中选择 Terminal > Run Build Task

如果编译成功,你应该可以看到一个与源代码同名的 exe 可执行文件

2.4. 调试C语言的源代码

这一步我们需要创建一个 launch.json 文件来告诉 VSCode 如何编译 C 语言的源代码,即按下 F5 时启动 GDB 调试器。

在菜单中选择 Run > Add Configuration ,然后选择 C++ (GDB/LLDB) 。随后会出现一个下拉菜单,里面会有一些预设的调试配置。我们这里选择 gcc.exe 这一项。

VSCode 就会自动创建一个 launch.json 文件,同时编译并运行调试当前的 helloworld

launch.json 文件看起来可能是这样:

{
    // Use IntelliSense to learn about possible attributes.
    // Hover to view descriptions of existing attributes.
    // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [
        {
            "name": "gcc.exe - 生成和调试活动文件",
            "type": "cppdbg",
            "request": "launch",
            "program": "${fileDirname}\\${fileBasenameNoExtension}.exe",
            "args": [],
            "stopAtEntry": true,
            "cwd": "${workspaceFolder}",
            "environment": [],
            "externalConsole": false,
            "MIMode": "gdb",
            "miDebuggerPath": "C:\\ProgramData\\chocolatey\\bin\\gdb.exe",
            "setupCommands": [
                {
                    "description": "为 gdb 启用整齐打印",
                    "text": "-enable-pretty-printing",
                    "ignoreFailures": true
                }
            ],
            "preLaunchTask": "C/C++: gcc.exe build active file"
        }
    ]
}

其中 program 指定要进行调试的程序。

默认情况下,源代码中不会自动设置断点,我们可以把 stopAtEntry 的值改成 true ,这样在调试的时候,即便没有添加任何断点,调试也会停止在 main 函数的入口。

注意:preLaunchTask 指定调试之前需要执行的任务,需要确保其与 task.json 中的 label 的值一致。

2.5. 其他配置

如果希望调控更多的参数,我们可以创建一个 c_cpp_properties.json 文件,其中可以修改编译器的路径、头文件 (include) 的路径以及编译器使用的标准(如c99)等参数。

可以在 Command Palette (Ctrl+Shift+P) 中运行 C/C++: Edit Configurations (UI) 来查看这些参数,如果对参数进行了修改,VSCode 会把这些修改写入 c_cpp_properties.json 文件中。

image

这里我们把 C 语言的标准改为 c11 ,也可以不修改。

参考链接
  1. Get Started with C++ and Mingw-w64 in Visual Studio Code
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,189评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,577评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,857评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,703评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,705评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,620评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,995评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,656评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,898评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,639评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,720评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,395评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,982评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,953评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,195评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,907评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,472评论 2 342

推荐阅读更多精彩内容