文章目录
一、事先准备二、Code Runner插件自动编译运行(不能调试)三、配置json文件来编译、调试、运行(重点!通用方式)四、Json配置文件详解
一、事先准备
1. 安装C/C++编译器(mingw-w64的下载安装配置教程)
首先我们要知道,VSCode只是一个编辑器(editor,与记事本是同一类程序),并不是IDE(Integrated
Development Environment,集成开发环境,例如Visual Studio)。
它本身并没有带任何语言的编译器(Compiler),对任何语言都没有特殊优待,只是提供了许多丰富的、针对各种语言的插件。
于是,我们需要安装一个C/C++的编译器,并配置好环境变量。我们可以选择mingw-w64(gcc在windows下的对应)或Clang(苹果公司主导的基于LLVM的C/C++/Objective-C编译器)。
2. 设置环境变量
将安装好的压缩包解压,记下文件路径,添加到环境变量中
新建一个环境变量MinGW
设置成功以后,可以在 cmd 或 powershell 终端中直接识别各种C/C++编译命令。
3. 在VS code中安装C/C++的基本插件
首先点击最左边的“插件”图标,通过搜索安装如下三个插件:
C/C++:包含C/C++基本依赖项的插件,必须安装。Chinese (Simplified) Language:中文简体包,可选安装。Code Runner:多语言全能的代码运行插件,安装后右上角会多一个运行图标,鼠标右键菜单也多一个Run Code选项,可选安装。
二、Code Runner插件自动编译运行(不能调试)
安装此插件之后,直接可以通过右上角的图标或鼠标右键菜单来运行程序,结果直接在名为Code的输出中显示。
注意:但是在代码中使用了scanf、cin等输入语句时,会因为Code输出是只读的,导致程序无法输入数据也无法执行完毕,只能直接关闭重启VScode。
重启VScode后,我们需要依次打开:文件>首选项>设置>用户>拓展>Run Code Configuration,找到Run In Terminal勾选上
这时,代码会在内部名叫Code的集成终端下执行,能够进行输入,且可以点击右上角的垃圾桶图标可以直接结束程序运行并关闭集成终端。
PS:插件编译运行的注意问题
Code Runner插件只能自动的编译并运行,类似的还有C/C++ Compile Run插件等,它们本质上是代替用户输入了编译和执行命令,但存在一些局限。
例如,当我们在代码中使用了winsock2.h这个头文件时,使用插件运行就会产生链接错误:
#include <winsock2.h>#include <stdio.h>int main(){ SOCKET client_socket=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP); printf("Compile successfully!");}
原因是,插件都是按照预先设定好的规则,自动在终端执行编译和运行的指令,也就是上面红色划线部分的命令:
gcc A.c -o A ;
.\A
但是使用gcc/g++来编译使用了winsock2.h的代码时,我们应该在编译指令中增加“-lwsock32”指令,而插件默认情况下不会添加这条指令。
正确的编译指令应该是: gcc A.c -o A -lwsock32
解决方法就是打开终端,我们手动输入以上编译命令,再输入“.\A”即可
三、配置json文件来编译、调试、运行(重点!通用方式)
如果我们想要在VScode中调试代码,那么配置json文件来是最方便省事的方法,下面用例子来说明:
打开一个文件夹,创建一个cpp文件,例如下面的main.cpp:(按 Ctrl + ~ 打开终端窗口)
点击运行和调试图标,并点击“运行和调试”按钮
选择C++的(GDB/LLDB)来调试
C++代码就选择g++编译器,c代码就选择gcc编译器。(vs code会自动从环境变量中查找存在的编译器)
以我最新版本的VS code,点击之后的结果如下:
四、Json配置文件详解
前面已经介绍过,我们需要的就是对代码文件进行编译、调试和运行,本质上就是在终端中执行g++或gcc编译命令、gdb调试命令、.\main.exe命令。
所以,json配置文件就是帮我们自动输入这些命令而已。
1. launch.json文件解析
新版本点击运行和调试过后不会直接自动生成launch.json文件,自定义运行和调试需要创建launch.json文件
点击后会在当前目录的.vscode文件下创建一个launch.json文件,点击右下角添加配置
如果,我们选择 C/C++:(gdb)启动 ,则会生成如下配置代码段:
我们可以看到,只需要设置 program和miDebuggerPath两个字段的值即可,其他的值不用更改。
这个gdb配置的作用是:单独只调试而不编译生成。
这个配置没有 preLaunchTask 字段,我们也可以自己添加上去,这样可以完成 编译和调试 的任务。
同样的,我们也可以添加 C/C++:(Windows)启动 ,完成 只运行而不编译生成 的任务。
我们也可以添加 C/C++:(Windows)启动 配置后,再添加一个preLaunchTask字段,完成 编译和运行 的任务。
2. tasks.json文件解析
tasks.json是在调试或运行之前执行的编译任务定义也就是说:
preLaunchTask 字段是用来指定在调试启动之前要执行的任务,比如编译代码。
在 tasks.json 中定义的任务标签(label)会被 preLaunchTask 引用,执行相应的任务(tasks中的command)。
通过这种方式,可以在调试或运行程序之前,确保代码自动编译,保证你调试的是最新的可执行文件。