这篇文章讨论一下VSCode配置C++的方法,重点要讨论的是tasks.json和launch.json这两个配置文件,所以很多基础内容会直接略过。
1.安装MinGW-w64。为啥要装MinGW-w64?因为VSCode只是个编辑器,MinGW-w64包含了gcc编译器和gdb调试器。
2.安装VSCode。
3.安装VSCode的C/C++扩展。
好了,完成。
1.先看目录结构。
很简单对不对。
2.然后看看代码。
//demo.h
void Print(void);
//demo.cpp
#include"demo.h"
#include
void Print(void)
{
std::cout<<"hello world"<<std::endl;
}
//main.cpp
#include"demo.h"
int main(int argc, char *argv[])
{
Print();
return 0;
}
也非常简单对不对。
为什么要利用gcc和gdb进行编译调试?不是要讨论VSCode配置C++环境吗?因为要讲清楚tasks.json和launch.json内容编写的思路。
1.在VSCode中打开一个终端,输入命令g++ -g main.cpp ./src/demo.cpp -I ./include/ -o main.exe
现在可以看到生成了main.exe可执行程序。
2.接着就可以gdb调试了。
重点来了,先说一下这两个文件是干嘛的。可以这么理解,tasks.json对应gcc,用来配置如何生成main.exe,launch.json对应gdb,用来配置如何调试main.exe。
1.先看一下tasks.json的内容。
//tasks.json
{
"version": "2.0.0",
"tasks": [
{
"type": "cppbuild",
"label": "C/C++: g++.exe 生成活动文件",//任务名称
"command": "C:\\Program Files\\mingw64\\bin\\g++.exe",//编译器所在的位置
"args": [
"-fdiagnostics-color=always",
"-g",
"main.cpp",
"./src/demo.cpp",
"-I",
"./include/",
"-o",
"${workspaceFolder}\\main.exe"
],//编译参数
"options": {
"cwd": "${workspaceFolder}"
},
"problemMatcher": [
"$gcc"
],
"group": {
"kind": "build",
"isDefault": true
},
"detail": "编译器: \"C:\\Program Files\\mingw64\\bin\\g++.exe\""
}
]
}
比较重要的字段已经写好了注释,label是指任务名称,command是指要使用的编译器所在的位置,args是指编译参数,是不是发现args的内容和刚才直接gcc编译时的参数很像,很对,这个args就是gcc编译参数。
2.接着看一下launch.json的内容
//launch.json
{
"version": "0.2.0",
"configurations": [
{
"name": "(gdb) 启动",
"type": "cppdbg",
"request": "launch",
"program": "${workspaceFolder}\\main.exe",//可执行程序的位置
"args": [],
"stopAtEntry": false,
"cwd": "${workspaceFolder}",
"environment": [],
"externalConsole": false,
"MIMode": "gdb",
"miDebuggerPath": "C:\\Program Files\\mingw64\\bin\\gdb.exe",//调试器所在的位置
"setupCommands": [
{
"description": "为 gdb 启用整齐打印",
"text": "-enable-pretty-printing",
"ignoreFailures": true
},
{
"description": "将反汇编风格设置为 Intel",
"text": "-gdb-set disassembly-flavor intel",
"ignoreFailures": true
}
],
"preLaunchTask": "C/C++: g++.exe 生成活动文件"//前置任务的名称
}
]
}
比较重要的字段已经写好了注释,program是指要调试的可执行程序所在位置,也就是tasks.json生成的目标程序所在位置,miDebuggerPath是指要使用的调试器所在的位置,preLaunchTask是指前置任务名称。是不是发现这个preLaunchTask和tasks.json里的label是一样的,很对,就是一样的,而且必须一样。这个表示在执行调试任务之前,要先执行生成任务。这样VSCode就会先生成可执行程序,然后启动调试。
配置思路是不是打开了。
3.配置完成,F5调试。
1.可以看一下json文件的格式,会有帮助,而且json文件这么主流。
2.很多文章里提到c_cpp_properties.json,其实这个配置文件可以不写,tasks.json的args字段才是编译时真正用到的,当然这个写了对智能提示有帮助,方便。
3.如果是一些简单的项目,使用这种构建方法还是可以的,但是复杂项目还是安装cmake扩展,使用cmake的好。
欢迎讨论,欢迎指正,欢迎转载。