vscode C/C++的.vscode配置
Author: mikudouble
Created Time: April 4, 2022 7:44 PM
Significance: ⭐⭐⭐
0、注意事项
💡 我是在windows10下配置的,其他平台不一定有效
💡 看本文前请先安装好MinGW
,vscode
,以及vscode中的C/C++
插件
💡 项目文件夹和源文件不要有中文或者特殊符号
💡 项目所在路径不要有中文或者特殊符号
💡 本文看完后,可以去看一下我的另一篇文章:vscode关于C/C++编译运行的一些小配置
1、生成.vscode
调试配置
先建立好基本的目录结构与源代码文件,建立两个文件夹: include
和 src
,所有的.h
文件都放在 include
目录下,所有的.cpp
文件都放在 src
目录下。
-
目录结构
-
示例代码
-
main.cpp
#include <iostream> #include "../include/Sales_item.h" using namespace std; int main() { Sales_item item1, item2; item1.isbn = "0-201-78345-X"; item1.units_sold = 10; item1.revenue = 300.0; cout << item1.avg_price() << endl; item2.isbn = "0-201-78345-X"; item2.units_sold = 2; item2.revenue = 70; cout << item2.avg_price() << endl; if (item2.same_isbn(item1)) { cout << "same" << endl; } else { cout << "not same" << endl; } return 0; }
-
Sales_item.h
#ifndef __SALES_ITEM_H_ #define __SALES_ITEM_H_ #include <string> class Sales_item { public: // 常量成员函数 // 由于这个函数不对类的数据成员做任何修改,所以可以定义为常函数【参数列表后面加上const】 bool same_isbn(const Sales_item &rhs) const { // this->isbn = "1"; // 错误,常函数不能修改数据成员 return this->isbn == rhs.isbn; } double avg_price() const; public: Sales_item() : units_sold(0), revenue(0) {} // 本来应该将成员变量设为private的,但是为了方便,写成public public: std::string isbn; unsigned units_sold; double revenue; }; #endif // !__SALES_ITEM_H_
-
Sales_item.cpp
#include "../include/Sales_item.h" // 类外定义成员函数体,需要加上类作用域,即类的名字 double Sales_item::avg_price() const { if (!this->units_sold) { return 0; } else { return this->revenue / this->units_sold; } }
-
-
打开源代码main.cpp,按
F5
,然后选择第一项C++ (GDB/LLDB)
-
然后选择
C/C++: g++.exe 生成和调试活动文件...
-
由于我的代码是分成多个文件,所以vscode不能直接处理,此时会报错(如果源文件只有一个main.cpp,那么这里就不会报错)。现在选择
打开"launch.json"
,并仍然选择C++ (GDB/LLDB)
,你会发现生成了.vscode
,并且这个文件夹下面有launch.json
和tasks.json
两个文件- vscode报错
b. 生成了
launch.json
和tasks.json
两个文件 -
打开
tasks.json
,将"args": [ ... ]
中的"${file}",
注释掉,并在下面添加一行"${fileDirname}\\*.cpp",
,表示编译的文件是源文件main.cpp所在文件夹下的所有.cpp
文件,具体的可以看下图。然后注意一下这个
"label"
标签的值"C/C++: g++.exe 生成活动文件"
,它是编译源文件这个任务的名称,下一步会用到。另外也可以看看下面的的两个参数
"-o",
和"${fileDirname}\\${fileBasenameNoExtension}.exe"
,这表示编译生成的可执行文件的名字是main.exe
(因为源文件名是main.cpp),并且生成的位置就在源文件main.cpp所在的同一个文件夹。这里你可以选择修改生成的可执行文件的文件名和它的文件路径,我现在选择不做修改。 -
打开
launch.json
,点击右下角的添加配置
,选择C/C++: (gdb) 启动
,在生成的代码中添加一行"preLaunchTask": "C/C++: g++.exe 生成活动文件",
,这就是第4步中tasks.json
中那个"label"
的值,"preLaunchTask"
代表预启动的任务,表示每次调试或运行之前就会先对源文件进行编译另外,你也可以选择不添加
"preLaunchTask": "C/C++: g++.exe 生成活动文件",
,这样的话,就需要运行程序前先对程序进行编译,编译的快捷键是ctrl+shift+B
,然后才能ctrl+F5
运行或F5
调试。 -
在
launch.json
中,"program"
标签需要的参数是可执行文件的路径。在第4步中我们提到生成可执行文件的位置就在源文件main.cpp所在的同一个文件夹。因此,这里的"program"
的值改为"${fileDirname}\\${fileBasenameNoExtension}.exe"
-
下面的
"args": []
标签代表传递给程序的命令行参数,如果main()函数需要命令行参数,可以在这里添加。在本例中不需要命令行参数,所以不做修改 -
再看下面的
"miDebuggerPath"
标签,它表示调试程序(如gdb)的路径,将你的gdb路径添加进去即可(gdb的路径在MinGW的bin目录下) -
现在大功告成!返回
main.cpp
就可以开始运行或者调试了
2、最终的 .vscode
配置文件
-
不要直接照搬我的,有些需要你自己修改
-
launch.json
{ // 使用 IntelliSense 了解相关属性。 // 悬停以查看现有属性的描述。 // 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387 "version": "0.2.0", "configurations": [ { "preLaunchTask": "C/C++: g++.exe 生成活动文件", "name": "(gdb) 启动", "type": "cppdbg", "request": "launch", "program": "${fileDirname}\\${fileBasenameNoExtension}.exe", "args": [], "stopAtEntry": false, "cwd": "${fileDirname}", "environment": [], "externalConsole": false, "MIMode": "gdb", "miDebuggerPath": "D:\\bc\\environment\\mingw64\\bin\\gdb.exe", "setupCommands": [ { "description": "为 gdb 启用整齐打印", "text": "-enable-pretty-printing", "ignoreFailures": true }, { "description": "将反汇编风格设置为 Intel", "text": "-gdb-set disassembly-flavor intel", "ignoreFailures": true } ] } ] }
-
tasks.json
{ "tasks": [ { "type": "cppbuild", "label": "C/C++: g++.exe 生成活动文件", "command": "D:\\bc\\environment\\mingw64\\bin\\g++.exe", "args": [ "-fdiagnostics-color=always", "-g", // "${file}", "${fileDirname}\\*.cpp", "-o", "${fileDirname}\\${fileBasenameNoExtension}.exe" ], "options": { "cwd": "${fileDirname}" }, "problemMatcher": [ "$gcc" ], "group": { "kind": "build", "isDefault": true }, "detail": "调试器生成的任务。" } ], "version": "2.0.0" }