VSCode+CPP 开发环境

准备开始转向用 VSCode 做开发,所以把一些常用的开发环境转移到 VSCode 上。这篇介绍关于 C++ 的开发环境。博主打算就是中小型的不涉及界面的就用 VSCode 开发 C++,如果涉及 windows 界面的还是用 Visual Studio 这种 IDE 比较好。

测试环境

  • Windows 8.1
  • VSCode v1.11.1
  • tdm-gcc v5.1.0

安装 Visual Studio Code

去官网下载 VSCode 并安装: https://code.visualstudio.com/Download

安装 VSCode 的 C++ 插件

在 VSCode 上搜索插件 C++,找到作者是 Microsoft 的,安装即可。或者 Ctrl+P,再输入 ext install cpptools 进行安装。

安装 TDM-GCC

VSCode 默认不带编译和调试环境的,需要自行安装编译器等。
我选用的是 TDM-GCC 编译套件,方便易用。(Codeblocks、Dev-Cpp 等默认带的都是这款)。
下载地址:http://tdm-gcc.tdragon.net/download 根据自己的情况下载安装即可,会自动添加路径到环境变量 PATH。

配置 VSCode

安装好插件之后,在磁盘新建好自己的工作目录,比如我的是 D:\Dev\DevCpp,在 VSCode 的资源管理器中打开这个目录,
按 F5,打开 launch.json 文件,编辑并保存:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
{
"version": "0.2.0",
"configurations": [
{
"name": "C++ Launch (GDB)", // 配置名称,将会在启动配置的下拉菜单中显示
"type": "cppdbg", // 配置类型,这里只能为cppdbg
"request": "launch", // 请求配置类型,可以为launch(启动)或attach(附加)
"launchOptionType": "Local", // 调试器启动类型,这里只能为Local
"targetArchitecture": "x86", // 生成目标架构,一般为x86或x64,可以为x86, arm, arm64, mips, x64, amd64, x86_64
"program": "${fileDirname}/${fileBasenameNoExtension}.exe", // 将要进行调试的程序的路径
"miDebuggerPath": "gdb.exe", // miDebugger的路径,注意这里要与MinGw的路径对应。64位系统用gdb64.exe
"args": [
""
], // 程序调试时传递给程序的命令行参数,一般设为空即可
"stopAtEntry": false, // 设为true时程序将暂停在程序入口处,我一般设置为true
"cwd": "${workspaceRoot}", // 调试程序时的工作目录,一般为${workspaceRoot}即代码所在目录
"externalConsole": true, // 调试时是否显示控制台窗口,一般设置为true显示控制台
"preLaunchTask": "g++" // 调试会话开始前执行的任务,一般为编译程序,c++为g++, c为gcc
}
]
}

vscode-cpp-0

按 F1 键,出来输入框后,输入 task,选择 “配置任务运行程序”,再随便选一项,编辑并保存 tasks.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
{
"version": "0.1.0",
"command": "g++",
"args": [
"-g",
"${file}",
"-o",
"${fileDirname}/${fileBasenameNoExtension}.exe"
], // 编译命令参数
"problemMatcher": {
"owner": "cpp",
"fileLocation": [
"relative",
"${workspaceRoot}"
],
"pattern": {
"regexp": "^(.*):(\\d+):(\\d+):\\s+(warning|error):\\s+(.*)$",
"file": 1,
"line": 2,
"column": 3,
"severity": 4,
"message": 5
}
}
}

vscode-cpp-1

在.vscode 目录下新建文件 c_cpp_properties.json,编辑并保存:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
{
"configurations": [
{
"name": "Win32",
"includePath": [
"D:/Program Files/TDM-GCC-64/include",
"D:/Program Files/TDM-GCC-64/x86_64-w64-mingw32/include",
"D:/Program Files/TDM-GCC-64/lib/gcc/x86_64-w64-mingw32/5.1.0/include",
"D:/Program Files/TDM-GCC-64/lib/gcc/x86_64-w64-mingw32/5.1.0/include/c++"
],
"browse": {
"limitSymbolsToIncludedHeaders": true,
"databaseFilename": ""
}
}
],
"clang_format": {
"style": "file",
"fallback-style": "LLVM",
"sort-includes": false
}
}

其中 includePath 项的路径更改为你安装的 TDM-GCC 的实际路径,这一项是让 VSCode 识别到 C++ 的头文件,不然找不到的时候会报错,编译不成功。
vscode-cpp-2

调试 C++ 程序

新建 main.cpp 文件,编辑并保存:

1
2
3
4
5
6
7
8
9
10
11
#include <iostream>

using namespace std;

int main()
{
int var = 100;
cout << "Hello " << var << endl;

return 0;
}

在 return 0 处下断点,按 F5 进行调试(如果环境变量还没生效,重启下就好):
vscode-cpp-3
vscode-cpp-4

使用 Make 编译工程(可选)

如果使用 g++ 不能满足需求,还可以选择 Make 进行工程编译, 按 F5,打开 launch.json 文件,编辑并保存:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
{
"version": "0.2.0",
"configurations": [
{
"name": "C++ Launch (GDB)", // 配置名称,将会在启动配置的下拉菜单中显示
"type": "cppdbg", // 配置类型,这里只能为cppdbg
"request": "launch", // 请求配置类型,可以为launch(启动)或attach(附加)
"launchOptionType": "Local", // 调试器启动类型,这里只能为Local
"targetArchitecture": "x86", // 生成目标架构,一般为x86或x64,可以为x86, arm, arm64, mips, x64, amd64, x86_64
"program": "${fileDirname}/main.exe", // 将要进行调试的程序的路径
"miDebuggerPath": "gdb.exe", // miDebugger的路径,注意这里要与MinGw的路径对应。64位系统用gdb64.exe
"args": [], // 程序调试时传递给程序的命令行参数,一般设为空即可
"stopAtEntry": true, // 设为true时程序将暂停在程序入口处,我一般设置为true
"cwd": "${workspaceRoot}", // 调试程序时的工作目录,一般为${workspaceRoot}即代码所在目录
"externalConsole": true, // 调试时是否显示控制台窗口,一般设置为true显示控制台
"preLaunchTask": "build" // 调试会话开始前执行的任务,一般为编译程序,c++为g++, c为gcc
}
]
}

编辑并保存 tasks.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
{
// See https://go.microsoft.com/fwlink/?LinkId=733558
// for the documentation about the tasks.json format
"version": "0.1.0",
"command": "mingw32-make",
"isShellCommand": true,
"isBuildCommand": true,
"showOutput": "always",
"echoCommand": true,
"suppressTaskName": true,
"options": {
"cwd": "${fileDirname}"
},
"tasks": [
{
"taskName": "build",
"args": [
"all"
]
},
{
"taskName": "clean",
"args": [
"clean"
]
}
],
"problemMatcher": {
"owner": "cpp",
"fileLocation": [
"relative",
"${workspaceRoot}"
],
"pattern": {
"regexp": "^(.*):(\\d+):(\\d+):\\s+(warning|error):\\s+(.*)$",
"file": 1,
"line": 2,
"column": 3,
"severity": 4,
"message": 5
}
}
}

在工程目录下新建 Makefile 文件:

1
2
3
4
all:
g++ -static -g -o main.exe classdemo.cpp main.cpp
clean:
del /f *.o main.exe

然后建立三个工程文件做测试:

1
2
3
4
5
6
7
8
9
10
11
// classdemo.h

#ifndef CLASSDEMO_HPP
#define CLASSDEMO_HPP

class Classdemo {
public:
void greet();
};

#endif
1
2
3
4
5
6
7
8
// classdemo.cpp

#include "classdemo.h"
#include <iostream>

void Classdemo::greet() {
std::cout << "Hello" << std::endl;
}
1
2
3
4
5
6
7
8
9
10
11
// main.cpp

#include "classdemo.h"

int main()
{
Classdemo classdemo;
classdemo.greet();

return 0;
}

测试结果:vscode-cpp-5

格式化工具 ClangFormat 的配置

这个插件自带的格式化工具 ClangFormat,如果不自己配置好文件好像会有点问题,所以要自己处理下。 先找到 clang-format.exe 文件,位于:

1
%USERPROFILE%\.vscode\extensions\ms-vscode.cpptools-0.10.5\LLVM\bin

在命令提示符下,执行:

1
2
3
cd /d %USERPROFILE%\.vscode\extensions\ms-vscode.cpptools-0.10.5\LLVM\bin

clang-format -style=llvm -dump-config > .clang-format

这样就可以生成 LLVM 风格的配置文件.clang-format,把这个文件剪切到 VSCode 的 CPP 工程目录,下次格式化代码就没问题了。其他格式化风格的,看官网文档:Configurable Format Style Options

参考资料