[版权声明] 本站内容采用 知识共享署名-非商业性使用-相同方式共享 3.0 中国大陆 (CC BY-NC-SA 3.0 CN) 进行许可。
部分内容和资源来自网络,纯学习研究使用。如有侵犯您的权益,请及时联系我,我将尽快处理。
如转载请注明来自: Dreamlike博客,本文链接: VSCode+CPP开发环境
准备开始转向用VSCode做开发,所以把一些常用的开发环境转移到VSCode上。
这篇介绍关于C++的开发环境。博主打算就是中小型的不涉及界面的就用VSCode开发C++,如果涉及windows界面的还是用Visual Studio这种IDE比较好。
其他相关博文:
《VSCODE+PYTHON开发环境》
《VSCODE+GOLANG开发环境》
《VSCODE+NODE.JS+ANGULAR2开发环境》
一、测试环境
- 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文件,编辑并保存:
{ "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 } ] }
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
}
]
}
|
按F1键,出来输入框后,输入task,选择“配置任务运行程序”,再随便选一项,编辑并保存tasks.json:
{ "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 } } }
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目录下新建文件c_cpp_properties.json,编辑并保存:
{ "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 } }
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++的头文件,不然找不到的时候会报错,编译不成功。
六、调试C++程序
新建main.cpp文件,编辑并保存:
#include using namespace std; int main() { int var = 100; cout << "Hello " << var << endl; return 0; }
|
#include
using
namespace
std
;
int
main
(
)
{
int
var
=
100
;
cout
<<
"Hello "
<<
var
<<
endl
;
return
0
;
}
|
在return 0处下断点,按F5进行调试(如果环境变量还没生效,重启下就好):
七、使用Make编译工程(可选)
如果使用g++不能满足需求,还可以选择Make进行工程编译,
按F5,打开launch.json文件,编辑并保存:
{ "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 } ] }
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:
{ // 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 } } }
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文件:
all: g++ -static -g -o main.exe classdemo.cpp main.cpp clean: del /f *.o main.exe
|
all
:
g
++
-
static
-
g
-
o
main
.
exe
classdemo
.
cpp
main
.
cpp
clean
:
del
/
f *
.
o
main
.
exe
|
然后建立三个工程文件做测试:
classdemo.h
#ifndef CLASSDEMO_HPP #define CLASSDEMO_HPP class Classdemo { public: void greet(); }; #endif
|
#ifndef CLASSDEMO_HPP
#define CLASSDEMO_HPP
class
Classdemo
{
public
:
void
greet
(
)
;
}
;
#endif
|
classdemo.cpp
#include "classdemo.h" #include void Classdemo::greet() { std::cout << "Hello" << std::endl; }
|
#include "classdemo.h"
#include
void
Classdemo
::
greet
(
)
{
std
::
cout
<<
"Hello"
<<
std
::
endl
;
}
|
main.cpp
#include "classdemo.h" int main() { Classdemo classdemo; classdemo.greet(); return 0; }
|
#include "classdemo.h"
int
main
(
)
{
Classdemo
classdemo
;
classdemo
.
greet
(
)
;
return
0
;
}
|
测试结果:
八、格式化工具ClangFormat的配置
这个插件自带的格式化工具ClangFormat,如果不自己配置好文件好像会有点问题,所以要自己处理下。
先找到clang-format.exe文件,位于:
%USERPROFILE%\.vscode\extensions\ms-vscode.cpptools-0.10.5\LLVM\bin
|
%
USERPROFILE
%
\
.
vscode
\
extensions
\
ms
-
vscode
.
cpptools
-
0.10.5
\
LLVM
\
bin
|
在命令提示符下,执行:
cd /d %USERPROFILE%\.vscode\extensions\ms-vscode.cpptools-0.10.5\LLVM\bin clang-format -style=llvm -dump-config > .clang-format
|
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
参考链接:
《Visual Studio Code如何编写运行C、C++?》
《windows 10环境下 使用 msys2 + vs code 配置 c++ 的编译环境》
《【VSCode】Windows下VSCode编译调试c/c++》
《配置VSCode》
《ClangFormat》
如果本文对您有所帮助,可以请作者喝杯咖啡,感谢支持^_^