首页 > 技术文章 > win10下visual studio code安装及mingw C/C++编译器配置,launch.json和task.json文件的配置

tan-wm 2019-09-22 23:53 原文

2021.2.3更新

在work_space的.vscode文件夹里添加以下4个文件就完了,别用看下面哔哔了

1. c_cpp_properties.json

 1 {
 2     //C_Cpp_Properties.json是用于配置编译器环境的,包括启动器代号、位数(这些是自定义的)、编译选项、启动设置、编译模式等。
 3     //includePath指向C/C++标准库、用户头文件所在位置。
 4     //不需要CMake也可以直接编写C/C++
 5     "configurations": [
 6         {
 7             "name": "Linux",
 8             "includePath": [
 9                 "${workspaceFolder}/**"
10             ],
11             "defines": [],
12             "compilerPath": "/usr/bin/clang",
13             "cStandard": "c11",
14             "cppStandard": "c++17",
15             "intelliSenseMode": "clang-x64"
16         }
17     ],
18     "version": 4
19 }

 

2. launch.json

 1 {
 2     // Use IntelliSense to learn about possible attributes.
 3     // Hover to view descriptions of existing attributes.
 4     // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
 5     "version": "0.2.0",
 6     "configurations": [
 7         {
 8             "name": "(gdb) Launch", // 配置名称,将会在启动配置的下拉菜单中显示
 9             "type": "cppdbg", // 配置类型,这里只能为cppdbg
10             "request": "launch", // 请求配置类型,可以为launch(启动)或attach(附加)
11             "program": "${fileDirname}/${fileBasenameNoExtension}.out", // 将要进行调试的程序的路径
12             "args": [], // 程序调试时传递给程序的命令行参数,一般设为空即可
13             "stopAtEntry": false, // 设为true时程序将暂停在程序入口处,我一般设置为true
14             "cwd": "${workspaceFolder}", // 调试程序时的工作目录
15             "environment": [], 
16             "externalConsole": false, // 调试时是否显示控制台窗口,一般设置为true显示控制台,
17                                       // 但是最新版cpptools有BUG,具体请看文末的注意
18             "internalConsoleOptions": "neverOpen", // 如果不设为neverOpen,调试时会跳到“调试控制台”选项卡,你应该不需要对gdb手动输命令吧?
19             "MIMode": "gdb", // 指定连接的调试器,可以为gdb或lldb。但目前lldb在windows下没有预编译好的版本。
20             "miDebuggerPath": "gdb", // 调试器路径,Windows下后缀不能省略,Linux下则去掉
21             "setupCommands": [ // 用处未知,模板如此
22                 {
23                     "description": "Enable pretty-printing for gdb",
24                     "text": "-enable-pretty-printing",
25                     "ignoreFailures": false
26                 }
27             ],
28             "preLaunchTask": "Compile" // 调试会话开始前执行的任务,一般为编译程序。与tasks.json的label相对应
29         }
30     ]
31 }

 

3. setting.json

 1 {
 2     "files.associations": {
 3         "iostream": "cpp",
 4         "array": "cpp",
 5         "deque": "cpp",
 6         "forward_list": "cpp",
 7         "string": "cpp",
 8         "unordered_map": "cpp",
 9         "vector": "cpp"
10     }
11 }

 

4. tasks.json

 1 {
 2     // See https://go.microsoft.com/fwlink/?LinkId=733558
 3     // for the documentation about the tasks.json format
 4     // tasks.json这个文件是定义调试开始前要执行的任务,即(或者绝大多数是)编译程序, 定义了用于编译程序的编译器,所输出的文件格式,使用的语言标准等
 5     "version": "2.0.0",
 6     "tasks": [
 7         {
 8             "label": "Compile", // 任务名称,与launch.json的preLaunchTask相对应
 9             "command": "g++", // 要使用的编译器, C就写gcc
10             "args": [
11                 "${file}",
12                 "-o", // 指定输出文件名,不加该参数则默认输出a.exe,Linux下默认a.out
13                 "${fileDirname}/${fileBasenameNoExtension}.out",
14                 "-g", // 生成和调试有关的信息
15                 //"-Wall", // 开启额外警告
16                 "-static-libgcc", // 静态链接
17                 "-std=c11" // C语言最新标准为c11,或根据自己的需要进行修改比如C++17
18             ], // 编译命令参数
19             "type": "shell", // 可以为shell或process,前者相当于先打开shell再输入命令,后者是直接运行命令
20             "group": {
21                 "kind": "build",
22                 "isDefault": true // 设为false可做到一个tasks.json配置多个编译指令,需要自己修改本文件,我这里不多提
23             },
24             "presentation": {
25                 "echo": true, 
26                 "reveal": "always", // 在“终端”中显示编译信息的策略,可以为always,silent,never。具体参见VSC的文档
27                 "focus": true, // 设为true后可以使执行task时焦点聚集在终端
28                 "panel": "shared" // 不同的文件的编译信息共享一个终端面板
29             },
30             //"problemMatcher": "$gcc"
31         }
32     ]
33 }

 

 

-------------------------------------------------------------------------------------------------------------------------------------------------更新分割线--------------------------------------------------------------------------------------------------------------------------------------------------

1. 下载并安装vs code

        这个比较简单,略过。

2. 下载安装C/C++和中文插件

        首先下载安装C/C++,就是下面这货

 

 

         然后下载安装中文插件:

 

 

 按提示重启vs code,之后按shift + ctrl + P打开命令行,输入 Configure Display Language进行语言设置,选择ZH-CN作为语言(我这个版本是直接显示出已安装的语言列表,直接进行选择就行了,但看其他人的版本有的要打开locale.json并编辑其中locale一项如下:“locale”: "zh-CN")

 

 

 

3. 下载并安装C/C++编译器

        之前一直不了解gcc,g++,mingw这些东西,一直把前两个混淆,现在网上找了些资料如下:

https://www.cnblogs.com/oxspirt/p/6847438.html

https://blog.csdn.net/wjheha/article/details/77648729

这里我安装的是mingw(因为这个以前安装过,这里安装过程略),安装完之后在环境变量path中添加“安装目录\MinGW\bin”,以便vs code的插件能找到编译器所在位置,接下来就是看看怎么样能运行一个hello world了。首先创建一个项目文件夹,里面放cpp文件(注意路径最好不要带中文),你的hello_world.cpp就放在里面,打开cpp文件,点击左侧debug按钮,在按F5出现如下下拉列表,我这里选择C++(GDB/LLDB),

 

 

之后再出现这个下拉列表,我这里还是选择第一项,

 

 

这时系统会根据安装好的mingw自动生成配置好的launch.json文件,保存在工作文件夹的.vscode文件夹下,如下图

 

 

 然后关键的一步来了,在externalConsole一项,将false改为true!!

 

 

 然后切换回cpp文件,按F5,会弹出下面的提示,选择配置任务

 

之后又出现如下列表

 

 

 

 

 这里需要选择和之前选择一样的选项,之前选择的是g++.exe build and debug active file,所以这里我仍然选择g++那一项,之后系统就会在.vscode文件夹下自动生成task.json文件如下,

 

这个文件无需任何更改。

再切换回cpp文件,再按下F5,发现已经可以调试了,生成了相应的exe文件

 

PS:路径和文件名不能带中文,否则各种出错

参考:

https://blog.csdn.net/a845717607/article/details/94756604

https://blog.csdn.net/bat67/article/details/81268581

https://www.cnblogs.com/ghjnwk/p/9806677.html

 

————————————————————————————更新分割线————————————————————————————————

经过这两天的摸索碰壁,终于搞清楚launch.json和task.json这两个文件如何配合工作了。。。。上面的说法是从网上找来的,并不正确。

在进行编译前,需要先配置好launch.json 和task.json两个文件,对launch.json的各关键项解释如下:

其中name一栏随便填写,在调试的时候会在界面的左下角以“name(work dir)”显示出来,如下图

而"externalConsole"一项则决定是否弹出外部黑窗的形式显示,如果选false的话就不会弹出黑窗,而是显示在界面下方的“调试控制台”一项中。

关键是prelaunchTask这一项,这里的内容要与task.json中的task的label一致!!如下图

在task.json文件中,每增加一个task,就会在task[]列表中多一个项,每个项都有如下字段:

 其中command字段为编译器路径,注意这里如果选择g++.exe(例如上图),则无论是c文件还是cpp文件都可以编译生成可执行文件,如果选择的是gcc.exe则只能编译c文件,编译c++文件会出错!!

下面的cwd为编译器所在的位置,其他的保持默认就行。

推荐阅读