玩转 VSCode 之配置 C/C++ 语言开发环境

Linux && Windows 平台下配置 VS Code + C/C++ 语言学习、开发环境。

我们知道,配置 VSCode 多重开发环境,就是组合安装配置多种语言相关插件以及相关语言工具库 的过程。

下面正式开始在 VS Code 中配置 C/C++ 开发、调试环境(For Windows && Linux):

Extensions Setup

首先,需要安装 VSCode 中 C/C++ 开发过程中可能会用到的插件 >>>>

1 –> 必须安装的扩展:

C/C++:实际上就是指 cpptools,提供 C/C++ 语言支持,包括智能提示和调试功能等。

推荐 安装插件:C/C++ Extension Pack –> Popular extensions for C++ development in Visual Studio Code(插件合集包,包含了所有 C/C++ 开发中可能用到的流行插件)。

2 –> 其他可选扩展:

  • Include Autocomplete:提供 C/C++ 头文件名字的补全功能;

  • C/C++ Snippets:提供 C/C++ 重用代码块(Snippets)支持,最新 VSCode 中已集成有 Snippets 支持。

3 –> 不建议/不需要装的扩展:

  • GBKtoUTF8:把 GBK 编码的文档转换成 UTF8 编码的。此扩展可能有严重的 Bug;

  • C++ Intellisense:使用全局 GUN 工具为 C/C++ 提供智能提示;


创建 C/C++ 工程文件夹

我们知道,VScode 是以文件夹的形式来组织管理工程项目的。

故,首先你需要创建一个用来存放整个工程代码的文件夹也被称为 【工作目录】,这里我的为:CppProjectWSC

注意:工作目录路径中不能含有中文和空格和引号

然后通过 VSCode 打开该文件夹【File –> Open Folder 或使用快捷键 Ctrl + K + O】,选择刚才创建的那个文件夹即可。

事实上,此时你就可以将 VSCode 作为编辑器进行 C/C++ 源码学习和编写了。


Reffs Configuration

打起精神,重点来了…. 如果你只是将 VSCode 作为一个编辑器使用,那么上述就够了,当然这不是我们的目的。

再一次重申:VS Code 只是一个编辑器,并不是 IDE。

我们的目的是:想要在 VSCode 中直接使用 Code Runner 进行 C/C++ 代码的编写测试或者完成代码的 Debug(断点测试)功能,那么你还需要进行额外的配置。

需要配置那些???

  1. 配置一个 C/C++ 编译器:你需要确定当前系统环境下确保有一个可以用来编译 C/C++ 的编译器;
  2. 配置工程文件夹:你需要使用 VSCode 设置规则在工程文件夹中进行一些配置,以可以帮助我们完成一键构建(编译、链接等)、运行……

但由于编译器以及 VSCode 中的配置,在不同平台(Windows & Linux)下的具体细节存在一定的差异,下面将分为两部分内容分别介绍:

  • For Windows
  • For Linux

你可以直接选择你关注平台的配置,这两部分内容是独立完整的。

For Windows

先进行 Windows 平台下 C/C++ 编译器的选择,安装以及配置:

配置 C/C++ 编译器:MinGW-w64

MinGW-w64 的全称是:Minimalist GNU on Windows-win64bit,是 GCC 的 Windows 64bit 版本,可以编译生成 64bit 或 32bit 可执行程序。并且 MinGW-w64 是稳定可靠的、持续更新的 C/C++ 编译器,值得信赖!

所以,这里选择安装以及配置 MinGW-w64 作为 Window 平台下 C/C++ 的编译器。当然,你也选择配置其它 C/C++ 编译器,如:Clang 等。

1.1 –> Download Package

这里先给出 MinGW-w64 的托管网站,通过这里 >>>> 传送门 你可以获得其安装包。

这里提供两种安装方式:

  1. 在线安装器方式安装:MinGW-W64 Online Installer
  2. 某版本的现成安装包方式安装:例如,x86_64-posix-seh,版本选择可参看下文 1.2.1 中版本选择说明。

下载过程中可能由于网络问题导致安装包无法下载,例如,下载页面已经跳转但没有跳出下载安装包保存窗口,这时你可以尝试:

  • 等待网络变好后,重新刷新网页;
  • 寻找 【mirror】 或者 【Problems Downloading?】 选择一个较近的镜像网站,可能会获得较高(无法保证)的下载速度;
  • 基于上述两种尝试,两种安装方式对应的安装链接都尝试下

1.2 –> Begin To Setup

分别来看两种安装方式:

1.2.1 –> 在线安装器方式进行安装

安装选项:

选项说明:

名称 解释 可选项 说明 选择建议
Version 版本号 无需求选择最新
Architecture 架构 i686, x86_64 64位系统选择 x86_64, 32位系统选择 i686 x86_64
Threads 线程模式 posix, win32 Windows 平台选 win32, 其它选 posix win32
Exception 异常处理 x86_64:sjlj,seh; i686:sjlj,dwarf sjlj同时支持32bit & 64bit,稳定性好;seh 和 dwarf 只分别支持 64bit,32bit,但性能好 seh
Build revision 构建版本号 0

【Next】 之后,你可以自定义 MinGW-w64 的安装目录。


下面来看第二种安装方式 >>>>

1.2.2 –> 某版本的现成安装包方式安装

下载相应的安装包,具体版本选择可参考上表,选择合适位置解压(保证路径中没有空格的目录)即可。


1.3 –> Config Envs-Vars

MinGW-w64 安装好之后,需要检查是否已添加环境变量。

你可以尝试如下命令判断是否已经自动添加了环境变量(DOS):

1
$ g++ --version

如果没有 g++ 的版本输出信息,说明需要添加环境变量:

将 MinGW-w64 安装包目录下的 bin 文件夹添加至系统环境变 PATH 中 ↓↓↓↓↓↓

添加后查看(g++ && gcc):

1
2
3
4
5
6
7
8
9
10
11
> g++ --version
g++ (x86_64-posix-seh-rev0, Built by MinGW-W64 project) 8.1.0
Copyright (C) 2018 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

> gcc --version
gcc (x86_64-posix-seh-rev0, Built by MinGW-W64 project) 8.1.0
Copyright (C) 2018 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

至此,C/C++ 编译器:MinGW-w64 的安装以及配置已经完成了~~~


解决了编译器的问题后,接着看如何完成后续的 VSCode 配置: >>>>

配置工程文件夹

前面提到过,需要使用 VSCode 设置规则在工程文件夹中进行一些配置,以可以帮助我们完成一键构建(编译、链接等)、运行……

事实上,这总共会涉及到 4 个配置文件:

1
2
3
4
5
6
7
8
9
10
11
# launch.json
# tasks.json
# settings.json
# c_cpp_properties.json


>>> 注意:
# VSCode 单次运行一个脚本视为一个 task,相应任务的配置文件为 tasks.json;
# settings.json 为上面我们创建的工程文件夹(工作区,CppProjectWSC)的配置文件;
# launch.json 是调试环境的配置文件;
# c_cpp_properties.json 主要是用来配置 C/C++ 引用库路径的。

在开始 【launch.json & tasks.json & settings.json & c_cpp_properties.json】 配置之前,你应该知道:

你可以选择直接在当前工程文件夹(CppProjectWSC)下创建一个 .vscode 文件夹,作为工程文件夹的环境配置目录,随后直接创建空白的上述四个文件,然后贴入你的配置内容,这是允许的。

但我们 不建议采用这种直接创建的方式,VSCode 直接提供了自动生成的方法,自动生成后你只需要修改或者添加一些你需要的配置就可以了。


2.1 –> Go Start

我们将从 VSCode 中的 Debug(爬虫)功能入手,来完成整个配置过程。并且熟悉 VSCode 中 C/C++ 代码的编译、运行以及断点调试。

首先,点击“爬虫”按钮(或 Ctrl + Shift + D),打开 VSCode 中的 Debug(C/C++ 编译调试)界面观察一下:


下面正式开始配置 gcc 和 g++ 分别用于编译 C 和 C++:

2.1.1 –> C 语言配置

开始配置之前,先给出一个 C 的实例代码方便后续的配置以及环境测试。在工程文件夹 CppProjectWSC 下创建一个名为 cTest.c 的 C 源码文件,内容为:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
/*
* @Description:
* @Author: TheNightIsYoung
* @E-Mail: guojie0213_iit@163.com
* @Date: 2017-09-26 11:07:21
* @LastEditors: TheNightIsYoung
* @LastEditTime: 2019-09-26 11:20:28
*/
#include <stdio.h>

int main(int argc, char const *argv[])
{
/**
* @Description:
* @Func: VS Code Test
* @Param:
* @return:
*/

printf("Welcome to use VS Code.\n");
printf("This is a debug test.\n");
return 0;
}

此时由于安装配置了编译器的原因,其实已经可以使用 Code Runner (Ctrl + Alt + N)运行 C 的代码了:

1
2
3
[Running] cd "e:\VSCodeWorkS\CPPProjectWSC\" && gcc cTest.c -o cTest && "e:\VSCodeWorkS\CPPProjectWSC\"cTest
Welcome to use VS Code.
[Done] exited with code=0 in 0.684 seconds

完美~~~


继续 ↓↓↓↓↓

2.1.1-1 –> 配置调试设置

【Ctrl + Shift + D】 –> F5(启动 Debug 调试功能),跳转出一个小命令框选择 【C++ (GDB/LLDB)】,然后你可以看到:

然后,我们选择:【gcc build and debug active file】,此时 VSCode 会自动在工作区中创建 .vscode,并且在 .vscode 目录下生成配置文件:launch.json,用来配置调试的相关信息。内容如下:

注意:使用较新版本的 C/C++ 插件时,可能无法生成 launch.json 配置文件。此时,你可以插件的设置按钮选择【Install Another Version】,这里可以选择 1.8.4

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
{
// 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": [

/* ------ GCC Launch For C ------ */
{
"name": "(gdb) Launch",
"type": "cppdbg",
"request": "launch",
"program": "${fileDirname}\\${fileBasenameNoExtension}.exe",
"args": [],
"stopAtEntry": false,
"cwd": "${workspaceFolder}",
"environment": [],
"externalConsole": false,
"MIMode": "gdb",
"miDebuggerPath": "F:\\MinWG64\\mingw64\\bin\\gdb.exe",
"setupCommands": [
{
"description": "Enable pretty-printing for gdb",
"text": "-enable-pretty-printing",
"ignoreFailures": true
},
{
"description": "Set Disassembly Flavor to Intel",
"text": "-gdb-set disassembly-flavor intel",
"ignoreFailures": true
}
],
"preLaunchTask": "gcc build active file"
}
]
}

可以检查默认生成 launch.json 内容是否和上述一样,否则新手需要保证一致(当然,miDebuggerPath 需要配置你自己的 gdb.exe 路径)。

配置好 launch.json 文件后(用来启动调试任务),此时你可以查看 .vscode 目录下是否生成 tasks.json

如果有 tasks.json 文件,直接跳过这里开始后续配置,否则重新 –> F5(启动 Debug 调试功能)此时可能会弹出窗口显示(很大可能):

1
Could not find the task 'gcc build active file'

提示你找不到 task gcc build active file,这时因为 task.json 文件不存在。


2.1.1-2 –> 配置构建任务

此时菜单栏选择 【Terminal –> Configure Task –> Create task.json file from template –> others】 便会自动完成 tasks.json 的创建,默认内容如下:

1
2
3
4
5
6
7
8
9
10
11
12
{
// See https://go.microsoft.com/fwlink/?LinkId=733558
// for the documentation about the tasks.json format
"version": "2.0.0",
"tasks": [
{
"label": "echo",
"type": "shell",
"command": "echo Hello"
}
]
}

此时需要我们来重新配置 tasks.json 文件,配置内容如下:

注意 command 要修改为你本地的 gcc.exe 路径;【options -> cwd】 也需要修改为你本地的 MinWG64/bin 路径。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
{
// See https://go.microsoft.com/fwlink/?LinkId=733558
// for the documentation about the tasks.json format
"version": "2.0.0",
"tasks": [

/* ------ Configure GCC Compiler For C ------ */
{
"label": "gcc build active file",
"type": "cppbuild",
"command": "F:\\MinWG64\\mingw64\\bin\\gcc.exe",
"args": [
"-g",
"${file}",
"-o",
"${fileDirname}\\${fileBasenameNoExtension}.exe"
],
"options": {
"cwd": "F:\\MinWG64\\mingw64\\bin"
},
"problemMatcher":[
"$gcc"
],
"group": {
"kind": "build",
"isDefault": true
}
}
]
}

对于 tasks.json 文件,是为了方便在 VScode 里编译 C/C++ 代码,可以将类似 g++ -g main.cpp 等 gcc/g++ 命令写入 VScode 的任务系统。

========================================================================

再来总结一下:

launch.json 用来启动断点调试程序,其中有一个 ”preLaunchTask“=”gcc build active file" ,也就是添加一个 launch(启动)的任务,任务名为 gcc build active file,这 gcc build active file 就是我们在 tasks.json 中设置的 lable(个人理解:也就是说 launch 通过 preLaunchTask 去 tasks.json 查找具体的编译任务,然后完成编译,链接,运行….)。

========================================================================

事实上,如果你仅仅编写 C 语言,到此 VS Code 已经能够满足你的要求。你可以尝试一下对上述给出的 C 源码进行断点调试(F5)。调试的两个快捷键与 Visual Studio 相同,F10 逐过程,F11 逐语句。


2.1.2 —> C++ 语言配置

我们再来创建一个 C++ 源码文件(c++Test.py)用于完成后续 C++ 语言的配置与测试:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
/*
* @Description:
* @Author: TheNightIsYoung
* @E-Mail:
* @Date: 2017-09-20 13:26:01
* @LastEditors: TheNightIsYoung
* @LastEditTime: 2019-09-20 13:29:54
*/
#include <iostream>

using namespace std;

int main(int argc, char const *argv[])
{
/**
* @Description:
* @Func: VSCode Test
* @Param:
* @return:
*/

cout << "Welcome to use VS Code." << endl;

return 0;
}

此时由于安装配置了编译器的原因,其实已经可以使用 Code Runner (Ctrl + Alt + N)运行 C++ 的代码了:

1
2
3
4
[Running] cd "e:\VSCodeWorkS\CPPProjectWSC\" && g++ c++Test.cpp -o c++Test && "e:\VSCodeWorkS\CPPProjectWSC\"c++Test
Welcome to use VS Code.

[Done] exited with code=0 in 0.515 seconds

完美~~~


继续 ↓↓↓↓↓

2.1.2-1 –> 配置调试设置

继续配置 C++ 的断点调试,参照前面已经生成的 C 的配置:

先来打开之前配置 C 语言的 launch.json,点击页面右下角的【Add Configuration】,选择【(gdb)launch】,可以看到为我们生成的一个新的调试方式:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
"configurations": [

{
"name": "(gdb) Launch",
"type": "cppdbg",
"request": "launch",
"program": "enter program name, for example ${workspaceFolder}/a.exe",
"args": [],
"stopAtEntry": false,
"cwd": "${fileDirname}",
"environment": [],
"externalConsole": false,
"MIMode": "gdb",
"miDebuggerPath": "/path/to/gdb",
"setupCommands": [
{
"description": "Enable pretty-printing for gdb",
"text": "-enable-pretty-printing",
"ignoreFailures": true
},
{
"description": "Set Disassembly Flavor to Intel",
"text": "-gdb-set disassembly-flavor intel",
"ignoreFailures": true
}
]
},

对比着之前的 gcc 调试方式,我们需要修改一点细节,从之前生成的信息复制过来修改 launch.json,主要修改这几个选项:

–> 1] program

1
${fileDirname}\\${fileBasenameNoExtension}.exe

–> 2] miDebuggerPath

1
复制之前的路径

–> 3] stopAtEntry

1
true // 非必须

–> 4] 添加 preLaunchTask

1
"preLaunchTask": "g++ build active file" // 注意上个设置项结尾的逗号

然后,修改一下两个启动器名称(name 重复了),完成后的 launch.json 变为如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
{
// 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": [

/* ------ G++ Launch For C/C++ ------ */
{
"name": "(G++) Launch", // 配置名称:将会在启动配置的下拉菜单中显示;
"type": "cppdbg", // 配置类型: 使用 GDB 或 LLDB 时只能是 cppdbg;
"request": "launch", // 请求配置类型: 可以设置为 launch(启动)或 attach(附加);
"program": "${fileDirname}/${fileBasenameNoExtension}.exe", // 设置将要进行调试的程序的路径;
"args": [], // 程序调试时传递给程序的命令行参数,一般设为空即可;
"stopAtEntry": false, // 设为 true 时,程序将暂停在程序入口处,一般设置为 false;
"cwd": "${workspaceFolder}", // 调试程序时的工作目录:一般设置为 ${workspaceRoot},即代码所在目录(工作区);
"environment": [], // 设置调试时添加到程序环境中的环境变量,例如: [ { "name": "squid", "value": "clam" } ];
"externalConsole": false, // 调试时是否显示控制台窗口:一般设置为 true,显示控制台;

"windows": { // For Windows
"MIMode": "gdb", // 指定连接的调试器:可以为 gdb 或 lldb(但目前 lldb 在 Windows下没有预编译好的版本);
"miDebuggerPath": "F:/MinWG64/mingw64/bin/gdb.exe" // 调试器(miDebugger)路径,注意 Windows 下这里要与 MinGw 的路径对应;
},
"linux": { // For Linux
"MIMode": "gdb", // 指定连接的调试器:可以为 gdb 或 lldb(但目前 lldb 在 Windows下没有预编译好的版本);
"miDebuggerPath": "/usr/bin/gdb" // 调试器(miDebugger)路径,注意 Windows 下这里要与 MinGw 的路径对应;
},

"setupCommands": [ // 执行下面的命令数组以设置 GDB 或 LLDB
{
"description": "Enable pretty-printing for gdb",
"text": "-enable-pretty-printing",
"ignoreFailures": true
},
{
"description": "Set Disassembly Flavor to Intel",
"text": "-gdb-set disassembly-flavor intel",
"ignoreFailures": true
}
],
"logging": { // 用于设置:将哪些类型的消息记录到调试控制台。
"exceptions": true, // 是否应将异常消息记录到调试控制台,默认为 true;
"moduleLoad": true, // 是否应将模块加载事件记录到调试控制台,默认为 true;
"programOutput": true, // 是否应将程序输出记录到调试控制台的可选标志,默认为 true;
"engineLogging": false, // 是否应将诊断引擎日志记录到调试控制台,默认为 false;
"trace": false, // 是否将诊断适配器命令跟踪记录到调试控制台,默认为 false;
"traceResponse": false // 是否将诊断适配器命令和响应跟踪记录到调试控制台,默认为 false。
},
"preLaunchTask": "g++ build active file" // 设置调试会话开始前将执行的任务:一般为编译程序(例如 C++:g++.exe, C:gcc.exe),与 tasks.json 的 label 相对应;
},

/* ------ GCC Launch For C ------ */
{
"name": "(GCC) Launch",
"type": "cppdbg",
"request": "launch",
"program": "${fileDirname}/${fileBasenameNoExtension}.exe",
"args": [],
"stopAtEntry": true,
"cwd": "${workspaceFolder}",
"environment": [],
"externalConsole": false,
"MIMode": "gdb",
"miDebuggerPath": "F:/MinWG64/mingw64/bin/gdb.exe",
"setupCommands": [
{
"description": "Enable pretty-printing for gdb",
"text": "-enable-pretty-printing",
"ignoreFailures": true
},
{
"description": "Set Disassembly Flavor to Intel",
"text": "-gdb-set disassembly-flavor intel",
"ignoreFailures": true
}
],
"preLaunchTask": "gcc build active file"
}
]
}

2.1.2-2 –> 配置构建任务

然后我们打开 task.json,按照之前生成的 gcc 编译命令,添加 g++ 编译命令。只需将之前的复制过来一份更改以下项目就行:

–> 1] label

1
将 gcc build active file 改为:g++ build active file

–> 2] command

1
将之前的调试编译器由 "gcc" 改为:"g++"

完成后的 task.json 配置文件:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
{
// See https://go.microsoft.com/fwlink/?LinkId=733558
// for the documentation about the tasks.json format
"version": "2.0.0",
"tasks": [

/* ------ Configure G++ Compiler For C/C++ ------ */
{
"label": "g++ build active file", // 任务名称:被启动器 Launch 调用,与 launch.json 的 preLaunchTask 设置项相对应;
"type": "shell", // { shell | process }
"command": "F:/MinWG64/mingw64/bin/g++.exe", // 设置调试时使用的编译器: 这里设置为 G++,用于编译 C++ 语言;
"args": [
"-g", // 生成和调试有关的信息;
"${file}",
"-o", // 设置编译后输出的文件名:默认输出 a.exe;
"${fileDirname}/${fileBasenameNoExtension}.exe"
],
"options": {
"cwd": "F:/MinWG64/mingw64/bin"
},
"problemMatcher":[
"$gcc"
],
"group": { // 用于定义此任务属于的执行组
"kind": "build", // { build | test }
"isDefault": true // { true | false }
}
},

/* ------ Configure GCC Compiler For C ------ */
{
"label": "gcc build active file",
"type": "shell",
"command": "F:/MinWG64/mingw64/bin/gcc.exe",
"args": [
"-g",
"${file}",
"-o",
"${fileDirname}/${fileBasenameNoExtension}.exe"
],
"options": {
"cwd": "F:/MinWG64/mingw64/bin"
},
"problemMatcher":[
"$gcc"
],
"group": {
"kind": "build",
"isDefault": true
}
}
]
}

至此,回到我们的调试界面(Debug),已经可以看到启动条目里面具有 g++/gcc 调试选项,你可以再尝试一下对上述给出的 C++ 源码进行断点调试(F5)。

好了,你的 VS Code(Windows)已经可以同时编译调试 C/C++ ~


你应该还没忘了之前说过的有 4 个文件进行配置吧?余下的两个配置文件与 C/C++(库引用、C 标准等)以及一些项目自定义设置相关。

话不多说,开始配置:

2.1.2-3 –> 配置单文件夹工作区设置(settings.json)

VSCode 可以通过 用户(User)文件夹 设置来实现高度可配置化。用户设置是全局的,但单文件夹的工作区的设置(.vscode/settings.json)是针对当前项目进行独立设置的,它会覆盖用户设置,你可以在其中进行当前项目的个性化设置。

换句话说,你可以在 settings.json 中针对当前工程项目类别(C++ or Java?)进行远超符合你代码书写习惯的设置,例如配置 Tab 空格数、自动保存、自动格式化等等。

如何自动生成 settings.json 文件??? >>>>>

打开 VSCode 设置页面(Ctrl + ,),切换到 Workspace,在配置项中随便找一个 Edit in settings.json 打开,即可在 .vscode 下自动生成 settings.json 文件。如果你已经针对工作区进行过配置,settings.json 是不为空的,否则应该是一个空白的文件。

这里给一个样例配置(你可以根据个人需要进行设置):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
{
"files.autoSave": "onWindowChange", // 文件自动保存选项;参数说明:onFocusChange => 当前文件失去焦点后自动保存; onWindowChange => 需要当前 VScode 窗口失去焦点才会自动保存
"files.autoSaveDelay": 3000, // 间隔多少毫秒自动保存,默认「1000毫秒」;如果配置了保存格式化代码,这个配置下自动保存不会格式化代码

"editor.tabSize": 4, // 配置 Tab 空格数
"editor.formatOnSave": false, // 保存自动格式化代码
"editor.formatOnPaste": true, // 粘贴自动格式化

"code-runner.runInTerminal": false, // 设置成 false 会在 “output” 中进行输出,无法输入;
"code-runner.executorMap": {
"c": "cd $dir && gcc $fileName -o $fileNameWithoutExt && $dir$fileNameWithoutExt",
"cpp": "cd $dir && g++ $fileName -o $fileNameWithoutExt && $dir$fileNameWithoutExt"
},
"code-runner.saveFileBeforeRun": true, // Run Code 前保存;
"code-runner.preserveFocus": true, // 若为 false,Run code 后光标会聚焦到终端上。如果需要频繁输入数据可设为 false;
"code-runner.clearPreviousOutput": true, // 每次 Run code 前清空终端中属于之前 Code runner 的日志消息;

"C_Cpp.clang_format_sortIncludes": true, // 格式化时调整 include 的顺序(按字母排序);
"C_Cpp.intelliSenseEngine": "Default", // 可以为 Default 或 Tag Parser,后者较老,功能较简单。具体差别参考 cpptools 扩展文档;
"C_Cpp.errorSquiggles": "Disabled",
"C_Cpp.autocomplete": "Default",

"files.associations": { // 将某文件扩展名视为某种语言,可用通配符模式以及文档中的已知语言字符串进行关联。
"iostream": "cpp",
"exit-thread.h": "c",
"ldsodefs.h": "c",
"random": "cpp",
"tls.h": "c",
"dl-osinfo.h": "c",
"stdio.h": "c"
}
}

2.1.2-4 –> 配置 C/C++ 引用库路径(c_cpp_properties.json)

Ctrl + Shift + P 调出命令控制窗口,再输入 edit 或者 configuration,选择 "C/C++:Edit Configurations(JSON)",然后这个文件就出来了,默认配置如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
{
"configurations": [
{
"name": "Win32",
"includePath": [
"${workspaceFolder}/**"
],
"defines": [
"_DEBUG",
"UNICODE",
"_UNICODE"
],
"compilerPath": "F:\\MinWG64\\mingw64\\bin\\gcc.exe",
"cStandard": "gnu17",
"cppStandard": "gnu++14",
"intelliSenseMode": "windows-gcc-x64"
}
],
"version": 4
}

注意,该配置文件中不允许有注释!!!

你需要将 C/C++ 开发可能用到的引用库路径设置进来,添加到 includePath 选项中即可。

支持自动查询,includePath 中需要添加的路径获取方法:cmd ——> gcc -v -E -x c++ -,搜索结果如下:

给出 c_cpp_properties.json 最终的配置内容(注意 brower 选项):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
{
"configurations": [
{
"name": "Win32",
"includePath": [
"${workspaceFolder}/**",
"F:/MinWG64/mingw64/include",
"F:/MinWG64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/include/c++",
"F:/MinWG64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/include/c++/x86_64-w64-mingw32",
"F:/MinWG64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/include/c++/backward",
"F:/MinWG64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/include",
"F:/MinWG64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/include-fixed",
"F:/MinWG64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/../../../../x86_64-w64-mingw32/include"
],
"defines": [
"_DEBUG",
"UNICODE",
"_UNICODE"
],
"compilerPath": "F:\\MinWG64\\mingw64\\bin\\gcc.exe",
"cStandard": "gnu17",
"cppStandard": "gnu++14",
"intelliSenseMode": "windows-gcc-x64",

"browse": {
"limitSymbolsToIncludedHeaders": true,
"databaseFilename": "",
"path": [
"${workspaceFolder}/**",
"F:/MinWG64/mingw64/include",
"F:/MinWG64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/include/c++",
"F:/MinWG64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/include/c++/x86_64-w64-mingw32",
"F:/MinWG64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/include/c++/backward",
"F:/MinWG64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/include",
"F:/MinWG64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/include-fixed",
"F:/MinWG64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/../../../../x86_64-w64-mingw32/include"
]
}
}
],
"version": 4
}

其中,browse 字段(重要)说明 >>>>

如果只是将需要包含的头文件放在 includePath 字段中,那么 include 的问题解决了,但是 defines 的问题还没有解决,这将会出现一大堆的提示。

这些提示大部分都是因为缺少相应的宏定义引起的,而 browse 可以搜索相应 browse.path 字段中所有的宏定义,并把缺少的宏定义补全,让 Definition/Declaration 操作可以无障碍。


For Linux

接下来,来看 Linux 平台下 C/C++ 编译器的选择,安装以及配置(大同小异):

配置 C/C++ 编译器:GCC && G++

对于 Centos( Centos7.2)而言,安装后可能是没有 C 语言和 C++ 编译环境的,故需要手动安装(yum)GCC/g++(安装前你可以通过 gcc/g++ --version 测试一下是否已安装过):

1
2
3
4
# GCC
$ yum -y install gcc
# g++
$ yum -y install gcc-c++

而对于 Ubuntu( Ubuntu16.04 Check),系统中默认已安装有 GCC/g++,你可以查看当前版本:

1
2
3
4
5
6
7
8
9
10
11
deeplearning@ThinkCentre-M910s-N000:~/DeepLearning$ gcc --version
gcc (Ubuntu 5.4.0-6ubuntu1~16.04.11) 5.4.0 20160609
Copyright (C) 2015 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

deeplearning@ThinkCentre-M910s-N000:~/DeepLearning$ g++ --version
g++ (Ubuntu 5.4.0-6ubuntu1~16.04.11) 5.4.0 20160609
Copyright (C) 2015 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

解决了编译器的问题后,接着看如何完成后续的 VSCode 配置: >>>>

配置工程文件夹

前面提到过,需要使用 VSCode 设置规则在工程文件夹中进行一些配置,以可以帮助我们完成一键构建(编译、链接等)、运行……

事实上,这总共会涉及到 4 个配置文件:

1
2
3
4
5
6
7
8
9
10
11
# launch.json
# tasks.json
# settings.json
# c_cpp_properties.json


>>> 注意:
# VSCode 单次运行一个脚本视为一个 task,相应任务的配置文件为 tasks.json;
# settings.json 为上面我们创建的工程文件夹(工作区,CppProjectWSC)的配置文件;
# launch.json 是调试环境的配置文件;
# c_cpp_properties.json 主要是用来配置 C/C++ 引用库路径的。

在开始 【launch.json & tasks.json & settings.json & c_cpp_properties.json】 配置之前,你应该知道:

你可以选择直接在当前工程文件夹(CppProjectWSC)下创建一个 .vscode 文件夹,作为工程文件夹的环境配置目录,随后直接创建空白的上述四个文件,然后贴入你的配置内容,这是允许的。

但我们 不建议采用这种直接创建的方式,VSCode 直接提供了自动生成的方法,自动生成后你只需要修改或者添加一些你需要的配置就可以了。


2.1 –> Go Start

我们将从 VSCode 中的 Debug(爬虫)功能入手,来完成整个配置过程。并且熟悉 VSCode 中 C/C++ 代码的编译、运行以及断点调试。

首先,点击“爬虫”按钮(或 Ctrl + Shift + D),打开 VSCode 中的 Debug(C/C++ 编译调试)界面观察一下:


下面正式开始配置 gcc 和 g++ 分别用于编译 C 和 C++:

2.1.1 –> C 语言配置

开始配置之前,先给出一个 C 的实例代码方便后续的配置以及环境测试。在工程文件夹 CppProjectWSC 下创建一个名为 cTest.c 的 C 源码文件,内容为:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
/*
* @Description:
* @Author: TheNightIsYoung
* @E-Mail: guojie0213_iit@163.com
* @Date: 2017-09-26 11:07:21
* @LastEditors: TheNightIsYoung
* @LastEditTime: 2019-09-26 11:20:28
*/
#include <stdio.h>

int main(int argc, char const *argv[])
{
/**
* @Description:
* @Func: VS Code Test
* @Param:
* @return:
*/

printf("Welcome to use VS Code.\n");
printf("This is a debug test.\n");
return 0;
}

此时由于安装配置了编译器的原因,其实已经可以使用 Code Runner (Ctrl + Alt + N)运行 C 的代码了:

1
Welcome to use VS Code.

完美~~~


继续 ↓↓↓↓↓

2.1.1-1 –> 配置调试设置

【Ctrl + Shift + D】 –> F5(启动 Debug 调试功能),跳转出一个小命令框选择 【C++ (GDB/LLDB)】,然后你可以看到:

然后,我们选择:【gcc build and debug active file】,此时 VSCode 会自动在工作区中创建 .vscode,并且在 .vscode 目录下生成配置文件:launch.json,用来配置调试的相关信息。内容如下:

注意:使用较新版本的 C/C++ 插件时,可能无法生成 launch.json 配置文件。此时,你可以插件的设置按钮选择【Install Another Version】,这里可以选择 1.8.4。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
{
// 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": [
/* ------ GCC Launch For C ------ */
{
"name": "gcc build and debug active file",
"type": "cppdbg",
"request": "launch",
"program": "${fileDirname}/${fileBasenameNoExtension}.out",
"args": [],
"stopAtEntry": true,
"cwd": "${workspaceFolder}",
"environment": [],
"externalConsole": false,
"MIMode": "gdb",
"setupCommands": [
{
"description": "Enable pretty-printing for gdb",
"text": "-enable-pretty-printing",
"ignoreFailures": true
}
],
"preLaunchTask": "gcc build active file",
"miDebuggerPath": "/usr/bin/gdb"
}
]
}

可以检查默认生成 launch.json 内容是否和上述一样,否则新手需要保证一致(当然,miDebuggerPath 需要配置你自己的 gdb 路径)。

配置好 launch.json 文件后(用来启动调试任务),此时你可以查看 .vscode 目录下是否生成 tasks.json

如果有 tasks.json,直接跳过这里开始后续配置,否则重新 –> F5(启动 Debug 调试功能)此时可能会弹出窗口显示(很大可能):

1
Could not find the task 'gcc build active file'

提示你找不到 task gcc build active file,这时因为 task.json 文件不存在。

2.1.1-2 –> 配置构建任务

此时菜单栏选择 【Terminal –> Configure Task –> Create task.json file from template –> others】 便会自动完成 tasks.json 的创建,默认内容如下:

1
2
3
4
5
6
7
8
9
10
11
12
{
// See https://go.microsoft.com/fwlink/?LinkId=733558
// for the documentation about the tasks.json format
"version": "2.0.0",
"tasks": [
{
"label": "echo",
"type": "shell",
"command": "echo Hello"
}
]
}

此时需要我们来重新配置 tasks.json 文件,配置内容如下:

注意 command 要修改为你本地的 gcc 路径;【options -> cwd】 也需要修改为你本地的 gcc/bin 路径。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
{
"tasks": [
/* ------ Configure GCC Compiler For C ------ */
{
"type": "shell",
"label": "gcc build active file",
"command": "/usr/bin/gcc",
"args": [
"-g",
"${file}",
"-o",
"${fileDirname}/${fileBasenameNoExtension}.out"
],
"options": {
"cwd": "/usr/bin"
},
"group": {
"kind": "build",
"isDefault": true
}
}
],
"version": "2.0.0"
}

对于 tasks.json 文件,是为了方便在 VScode 里编译 C/C++ 代码,可以将类似 g++ -g main.cppgcc/g++ 命令写入 VScode 的任务系统。

========================================================================

再来总结一下:

launch.json 用来启动断点调试程序,其中有一个 ”preLaunchTask“=”gcc build active file" ,也就是添加一个 launch(启动)的任务,任务名为 gcc build active file,这 gcc build active file 就是我们在 tasks.json 中设置的 lable(个人理解:也就是说 launch 通过 preLaunchTasktasks.json 查找具体的编译任务,然后完成编译,链接,运行….)。

========================================================================

事实上,如果你仅仅编写 C 语言,到此 VS Code 已经能够满足你的要求。你可以尝试一下对上述给出的 C 源码进行断点调试(F5)。调试的两个快捷键与 Visual Studio 相同,F10 逐过程,F11 逐语句。


2.1.2 —> C++ 语言配置

我们再来创建一个 C++ 源码文件(c++Test.py)用于完成后续 C++ 语言的配置与测试:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
/*
* @Description:
* @Author: TheNightIsYoung
* @E-Mail:
* @Date: 2017-09-20 13:26:01
* @LastEditors: TheNightIsYoung
* @LastEditTime: 2019-09-20 13:29:54
*/
#include <iostream>

using namespace std;

int main(int argc, char const *argv[])
{
/**
* @Description:
* @Func: VSCode Test
* @Param:
* @return:
*/

cout << "Welcome to use VS Code." << endl;

return 0;
}

此时由于安装配置了编译器的原因,其实已经可以使用 Code Runner (Ctrl + Alt + N)运行 C++ 的代码了:

1
Welcome to use VS Code.

完美~~~


继续 ↓↓↓↓↓

2.1.2-1 –> 配置调试设置

继续配置 C++ 的断点调试,参照前面已经生成的 C 的配置:

先来打开之前配置 C 语言的 launch.json,点击页面右下角的【Add Configuration】,选择【(gdb)launch】,可以看到为我们生成的一个新的调试方式:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
"configurations": [
{
"name": "(gdb) Launch",
"type": "cppdbg",
"request": "launch",
"program": "enter program name, for example ${workspaceFolder}/a.out",
"args": [],
"stopAtEntry": false,
"cwd": "${workspaceFolder}",
"environment": [],
"externalConsole": false,
"MIMode": "gdb",
"setupCommands": [
{
"description": "Enable pretty-printing for gdb",
"text": "-enable-pretty-printing",
"ignoreFailures": true
}
]
}

对比着之前的 gcc 调试方式,我们需要修改一点细节,从之前生成的信息复制过来修改 launch.json,主要修改这几个选项:

–> 1] program

1
${fileDirname}/${fileBasenameNoExtension}.o

–> 2] miDebuggerPath

1
复制之前的路径

–> 3] stopAtEntry

1
true // 非必须

–> 4] 添加 preLaunchTask

1
"preLaunchTask": "g++ build active file" // 注意上个设置项结尾的逗号

然后,修改一下两个启动器名称(name 重复了),完成后的 launch.json 变为如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
{
// 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": [

/* ------ G++ Launch For C/C++ ------ */
{
"name": "(G++) Launch", // 配置名称:将会在启动配置的下拉菜单中显示;
"type": "cppdbg", // 配置类型: 使用 GDB 或 LLDB 时只能是 cppdbg;
"request": "launch", // 请求配置类型: 可以设置为 launch(启动)或 attach(附加);
"program": "${fileDirname}/${fileBasenameNoExtension}.out", // 设置将要进行调试的程序的路径;
"args": [], // 程序调试时传递给程序的命令行参数,一般设为空即可;
"stopAtEntry": true, // 设为 true 时,程序将暂停在程序入口处,一般设置为 false;
"cwd": "${workspaceFolder}", // 调试程序时的工作目录:一般设置为 ${workspaceRoot},即代码所在目录(工作区);
"environment": [], // 设置调试时添加到程序环境中的环境变量,例如: [ { "name": "squid", "value": "clam" } ];
"externalConsole": false, // 调试时是否显示控制台窗口:一般设置为 true,显示控制台;

"windows": { // For Windows
"MIMode": "gdb", // 指定连接的调试器:可以为 gdb 或 lldb(但目前 lldb 在 Windows下没有预编译好的版本);
"miDebuggerPath": "D:\\...", // 调试器(miDebugger)路径,注意 Windows 下这里要与 MinGw 的路径对应;
},
"linux": { // For Linux
"MIMode": "gdb", // 指定连接的调试器:可以为 gdb 或 lldb(但目前 lldb 在 Windows下没有预编译好的版本);
"miDebuggerPath": "/usr/bin/gdb", // 调试器(miDebugger)路径,注意 Windows 下这里要与 MinGw 的路径对应;
},

"setupCommands": [ // 执行下面的命令数组以设置 GDB 或 LLDB
{
"description": "Enable pretty-printing for gdb",
"text": "-enable-pretty-printing",
"ignoreFailures": true
}
],
"logging": { // 用于设置:将哪些类型的消息记录到调试控制台。
"exceptions": true, // 是否应将异常消息记录到调试控制台,默认为 true;
"moduleLoad": false, // 是否应将模块加载事件记录到调试控制台,默认为 true;
"programOutput": true, // 是否应将程序输出记录到调试控制台的可选标志,默认为 true;
"engineLogging": false, // 是否应将诊断引擎日志记录到调试控制台,默认为 false;
"trace": false, // 是否将诊断适配器命令跟踪记录到调试控制台,默认为 false;
"traceResponse": false // 是否将诊断适配器命令和响应跟踪记录到调试控制台,默认为 false。
},
"preLaunchTask": "g++ build active file" // 设置调试会话开始前将执行的任务:一般为编译程序(例如 C++:g++.exe, C:gcc.exe),与 tasks.json 的 label 相对应;
},

/* ------ GCC Launch For C ------ */
{
"name": "(GCC) Launch",
"type": "cppdbg",
"request": "launch",
"program": "${fileDirname}/${fileBasenameNoExtension}.out",
"args": [],
"stopAtEntry": true,
"cwd": "${workspaceFolder}",
"environment": [],
"externalConsole": false,
"MIMode": "gdb",
"setupCommands": [
{
"description": "Enable pretty-printing for gdb",
"text": "-enable-pretty-printing",
"ignoreFailures": true
}
],
"preLaunchTask": "gcc build active file",
"miDebuggerPath": "/usr/bin/gdb"
}
]
}

2.1.1-2 –> 配置构建任务

然后我们打开 task.json,按照之前生成的 gcc 编译命令,添加 g++ 编译命令。只需将之前的复制过来一份更改以下项目就行:

–> 1] label

1
将 gcc build active file 改为:g++ build active file

–> 2] command

1
将之前的调试编译器由 "gcc" 改为:"g++"

完成后的 task.json 配置文件:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
{
"tasks": [

/* ------ Configure G++ Compiler For C/C++ ------ */
{
"type": "shell", // { shell | process }
"label": "g++ build active file", // 任务名称:被启动器 Launch 调用,与 launch.json 的 preLaunchTask 设置项相对应;
"command": "/usr/bin/g++", // 设置调试时使用的编译器: 这里设置为 GCC,用于编译 C 语言;

/**编译命令参数设置:*/
"args": [
"-g", // 生成和调试有关的信息;
"${file}",
"-o", // 设置编译后输出的文件名:默认输出 a.o;
"${fileDirname}/${fileBasenameNoExtension}.out"
],
"options": {
"cwd": "/usr/bin"
},
"group": { // 用于定义此任务属于的执行组
"kind": "build", // { build | test }
"isDefault": true // { true | false }
}
},

/* ------ Configure GCC Compiler For C ------ */
{
"type": "shell",
"label": "gcc build active file",
"command": "/usr/bin/gcc",
"args": [
"-g",
"${file}",
"-o",
"${fileDirname}/${fileBasenameNoExtension}.out"
],
"options": {
"cwd": "/usr/bin"
},
"group": {
"kind": "build",
"isDefault": true
}
}
],
"version": "2.0.0"
}

至此,回到我们的调试界面(Debug),已经可以看到启动条目里面具有 g++/gcc 调试选项,你可以再尝试一下对上述给出的 C++ 源码进行断点调试(F5)。

好了,你的 VS Code(Linux)已经可以同时编译调试 C/C++ ~


你应该还没忘了之前说过的有 4 个文件进行配置吧?余下的两个配置文件与 C/C++(库引用、C 标准等)以及一些工作区设置相关。

话不多说,开始配置:

2.1.2-3 –> 配置单文件夹工作区设置(settings.json)

VSCode 可以通过 用户(User)文件夹 设置来实现高度可配置化。用户设置是全局的,但单文件夹的工作区的设置(.vscode/settings.json)是针对当前项目进行独立设置的,它会覆盖用户设置,你可以在其中进行当前项目的个性化设置。

换句话说,你可以在 settings.json 中针对当前工程项目类别(C++ or Java?)进行远超符合你代码书写习惯的设置,例如配置 Tab 空格数、自动保存、自动格式化等等。

如何自动生成 settings.json 文件??? >>>>>

打开 VSCode 设置页面(Ctrl + ,),切换到 Workspace,在配置项中随便找一个 Edit in settings.json 打开,即可在 .vscode 下自动生成 settings.json 文件。如果你已经针对工作区进行过配置,settings.json 是不为空的,否则应该是一个空白的文件。

这里给一个样例配置(你可以根据个人需要进行设置):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
{
"files.autoSave": "onWindowChange", // 文件自动保存选项;参数说明:onFocusChange => 当前文件失去焦点后自动保存; onWindowChange => 需要当前 VScode 窗口失去焦点才会自动保存
"files.autoSaveDelay": 3000, // 间隔多少毫秒自动保存,默认「1000毫秒」;如果配置了保存格式化代码,这个配置下自动保存不会格式化代码

"editor.tabSize": 4, // 配置 Tab 空格数
"editor.formatOnSave": false, // 保存自动格式化代码
"editor.formatOnPaste": true, // 粘贴自动格式化

"code-runner.runInTerminal": false, // 设置成 false 会在 “output” 中进行输出,无法输入;
"code-runner.executorMap": {
"c": "cd $dir && gcc $fileName -o $fileNameWithoutExt && $dir$fileNameWithoutExt",
"cpp": "cd $dir && g++ $fileName -o $fileNameWithoutExt && $dir$fileNameWithoutExt"
},
"code-runner.saveFileBeforeRun": true, // Run Code 前保存;
"code-runner.preserveFocus": true, // 若为 false,Run code 后光标会聚焦到终端上。如果需要频繁输入数据可设为 false;
"code-runner.clearPreviousOutput": true, // 每次 Run code 前清空终端中属于之前 Code runner 的日志消息;

"C_Cpp.clang_format_sortIncludes": true, // 格式化时调整 include 的顺序(按字母排序);
"C_Cpp.intelliSenseEngine": "Default", // 可以为 Default 或 Tag Parser,后者较老,功能较简单。具体差别参考 cpptools 扩展文档;
"C_Cpp.errorSquiggles": "Disabled",
"C_Cpp.autocomplete": "Default",

"files.associations": { // 将某文件扩展名视为某种语言,可用通配符模式以及文档中的已知语言字符串进行关联。
"iostream": "cpp",
"exit-thread.h": "c",
"ldsodefs.h": "c",
"random": "cpp",
"tls.h": "c",
"dl-osinfo.h": "c",
"stdio.h": "c"
}
}

2.1.2-4 –> 配置 C/C++ 引用库路径(c_cpp_properties.json)

Ctrl + Shift + P 调出命令控制窗口,再输入 edit 或者 configuration,选择 "C/C++:Edit Configurations(JSON)",然后这个文件就出来了,默认配置如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
{
"configurations": [
{
"name": "Linux",
"includePath": [
"${workspaceFolder}/**"
],
"defines": [],
"compilerPath": "/usr/bin/gcc",
"cStandard": "c11",
"cppStandard": "c++17",
"intelliSenseMode": "clang-x64"
}
],
"version": 4
}

注意,该配置文件中不允许有注释!!!

你需要将 C/C++ 开发可能用到的引用库路径设置进来,添加到 includePath 选项中即可。

支持自动查询,includePath 中需要添加的路径获取方法:cmd ——> gcc -v -E -x c++ -,搜索结果如下:

给出 c_cpp_properties.json 最终的配置内容(注意 Browser 选项):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
{
"configurations": [
{
"name": "Linux",
"includePath": [
"${workspaceFolder}/**",

"/usr/include"
],

"defines": [
"_DEBUG",
"UNICODE",
"_UNICODE"
],

"compilerPath": "/usr/bin/gcc",
"cStandard": "c11",
"cppStandard": "c++17",
"intelliSenseMode": "clang-x64",

"browse": {
"limitSymbolsToIncludedHeaders": true,
"databaseFilename": "",
"path": [
"${workspaceFolder}/**",

"/usr/include"
]
}
}
],
"version": 4
}

其中,browse 字段(重要)说明 >>>>

如果只是将需要包含的头文件放在 includePath 字段中,那么 include 的问题解决了,但是 defines 的问题还没有解决,这将会出现一大堆的提示。

这些提示大部分都是因为缺少相应的宏定义引起的,而 browse 可以搜索相应 browse.path 字段中所有的宏定义,并把缺少的宏定义补全,让 Definition/Declaration 操作可以无障碍。


Problems

File not found (/build/…/glibc-2.2X)

Ubuntu16.04 中遇到一个问题(Error: File not found (/build/glibc-LK5gWL/glibc-2.23),具体如下::

1
2
3
4
5
6
7
Unable to open 'memcpy-avx-unaligned.S': Unable to read file (Error: File not found (/build/glibc-LK5gWL/glibc-2.23/sysdeps/x86_64/multiarch/memcpy-avx-unaligned.S)).

Unable to open 'libc-start.c': Unable to read file (Error: File not found (/build/glibc-LK5gWL/glibc-2.23/csu/libc-start.c)).

Unable to open 'ioputs.c': Unable to read file (Error: File not found (/build/glibc-LK5gWL/glibc-2.23/libio/ioputs.c)).

...

看起来是系统中缺少 glibc-2.23 库,解决方法如下:

1
2
3
4
5
6
7
8
9
$cd /
$sudo mkdir build
$cd build
$sudo mkdir glibc-LK5gWL

# 下载相应版本的 glibc:
$sudo wget -c http://ftp.gnu.org/gnu/glibc/glibc-2.23.tar.gz

$sudo tar –zxvf glibc-2.23.tar.gz

上述 /build/glibc-LK5gWL/glibc-2.2X 库安装成功后,需要将其引用路径添加到:c_cpp_properties.json 中:

1
2
3
4
5
6
7
"includePath": [
"${workspaceFolder}/**"

"/usr/include",
"/build/glibc-LK5gWL/glibc-2.23/include",
"/build/glibc-LK5gWL/glibc-2.23/**"
],

不修改的话,跳转到的源文件可能有很多报错(红色波浪线),但不影响使用。


Author

Waldeinsamkeit

Posted on

2017-08-02

Updated on

2022-12-02

Licensed under

You need to set install_url to use ShareThis. Please set it in _config.yml.

Comments

You forgot to set the shortname for Disqus. Please set it in _config.yml.