基本环境下载
1.我的系统是windows,自己先下载安装VSCode,网上视频实在太多,我建议跟着B站视频操作。
2.下载安装好后你需要明白:VSCode只是一个编辑工具,我们要写C/C++代码得编译运行,所以我们要配置它在windows下的开发环境,我们使用的是MINGW,它可以让我们在windows下使用gcc g++编译运行C/C++代码,知道这些就够了。
3.你可以在该路径下载版本为8.1.0版本的MINGW,放在某个文件夹,比如我放在E:\software\forVSCode
或者你也可以直接去官网下载
同样放在E:\software\forVSCode,这个是11.1.0的版本,注意不要下载最新的,因为我遇到版本问题带来的segmentation fault 错误且不容易发现。
如果你不想下载11.1.0或者你对于不同版本名称有所困惑,请你查看链接。
4.然后解压,然后复制它的 bin目录到系统环境变量中去;比如复制E:\software\forVSCode\mingw64\bin到环境变量中。
5.我们在在cmd中使用gcc --version 或者使用 where gcc 命令验证是否添加成功。
6.然后在本地创建一个文件夹并用vscode打开,我们打算把代码放在这个文件夹下,把他作为我们的工作区。
7.下载C/C++扩展。
单个.c文件怎么编译运行
8.此时你可以写代码了,如果在#include头文件的时候发现出现红色波浪线,请你检查下述图片中的includePath:
如果为空或者不是你刚下载的路径请你复制你的mingw的include目录并添加进去。
9.下面应该配置tasks.json了,点击下图中的配置任务,:
在弹出的界面中,选择C/C++:gcc.exe生成活动文件,此时你的工作区下生成了tasks.json文件。大概长下面这样,注意:如果这一步骤遇到了麻烦,请查看下图:
依照它的步骤执行即可,或者干脆直接新建一个tasks.json然后拷贝下图进去直接修改。
{
"version": "2.0.0",
"tasks": [
{
"type": "cppbuild",
"label": "C/C++: gcc.exe 生成活动文件",
"command": "E:/software/forVSCode/mingw64/bin/gcc.exe", //编译器路径
"args": [
"-fdiagnostics-color=always",
"-g",
"${file}",
"-o",
"${fileDirname}/${fileBasenameNoExtension}.exe" //生成可执行文件路径及名称,即:就在这个文件所在路径下生成一个去掉源文件扩展名后加上.exe的一个文件。
],
"options": {
"cwd": "E:/software/forVSCode/mingw64/bin"
},
"problemMatcher": [
"$gcc"
],
"group": "build",
"detail": "编译器:E:/software/forVSCode/mingw64/bin/gcc.exe"
}
]
}
10.鼠标点击源文件,然后点击下图:
·如果出现“终端进程启动失败(退出代码: -1)。 * 终端将被任务重用,按任意键关闭。”的错误。
请检查tasks.json中的:
"options": {
"cwd": "E:/software/forVSCode/mingw64/bin"
},
是否写对。
此外,你使用这种方法编译文件时要记得鼠标点击你要编译的源文件,而不是点击其他文件,否则你将得到这个错误:
总之,你要记着:此时我们编译代码的操作就是终端-运行生成任务的方式,只要.vscode下的配置文件tasks.json(编译依赖这个文件)正确即可,我们在创建新的工程的时候也可以直接把.vscode文件夹拷贝过去,根据自己需要决定是否修改或者不修改,实现复用。
11.如果一切顺利的话,你将得到一个exe文件,键盘同时按下Ctrl+`打开终端:
hello被打印出来。
多个.c文件怎么编译运行
12.此外值得注意的是:上述方法针对的是单文件,下面我们讲解多个C/C++文件。
我们继续创建一个新的文件夹,并用vscode打开。并把之前的.vscode复制过来,略微改造:
我的修改结果:
{
"version": "2.0.0",
"tasks": [
{
"type": "cppbuild",
"label": "C/C++: gcc.exe 生成活动文件",
"command": "E:/software/forVSCode/mingw64/bin/gcc.exe", //编译器路径
"args": [
"-fdiagnostics-color=always",
"-g",
"${workspaceFolder}/*.c",
"-o",
"${workspaceFolder}/${workspaceRootFolderName}.exe" //生成可执行文件路径
],
"options": {
"cwd": "E:/software/forVSCode/mingw64/bin"
},
"problemMatcher": [
"$gcc"
],
"group": "build",
"detail": "编译器:E:/software/forVSCode/mingw64/bin/gcc.exe"
}
]
}
然后写好两个.c源文件,用于测试验证。
此时继续点击-终端-运行生成任务。
然后Ctrl+`打开终端,运行可执行文件。
C++文件编译运行
13.此时我们已经学会了在vscode下编译单个C文件和多个C文件,那么C++呢?
我们回到最开始编译单文件的工作区,Ctrl+shift+P,点击C/C++编辑配置,我们来到这里:
修改后,我们可以看到c_cpp_properties.json多了一个C++的配置:
此时,我们还缺少对于tasks.json的配置:
鼠标点击我们写好的hello.cpp,然后点击:
此时tasks.json增加了相关配置:
此时,点击-终端-运行生成任务,选择g++.exe,然后Ctrl+`打开终端,然后运行即可:
同样的,要编译多个C++文件,我们只需要修改tasks.json即可。
14.下面我们创建launch.json文件,为我们调试文件做准备。
弹出后,选择C++(GDB)。
点击“添加配置”:
然后选择“C/C++ (GDB启动)。
生成默认配置是不能用的,我们必须做出相关修改:
{
"version": "0.2.0",
"configurations": [
{
"name": "(gdb) 启动",
"type": "cppdbg",
"request": "launch",
"program": "${fileDirname}/${fileBasenameNoExtension}.exe", //调试谁?当然是tasks.json生成的可执行文件
"args": [],
"stopAtEntry": false,
"cwd": "${fileDirname}",
"environment": [],
"externalConsole": false,
"MIMode": "gdb",
"miDebuggerPath": "E:\\software\\forVSCode\\mingw64\\bin\\gdb.exe", //用谁调试,我们使用mingw下的gdb.exe
"setupCommands": [
{
"description": "为 gdb 启用整齐打印",
"text": "-enable-pretty-printing",
"ignoreFailures": true
},
{
"description": "将反汇编风格设置为 Intel",
"text": "-gdb-set disassembly-flavor intel",
"ignoreFailures": true
}
]
}
]
}
如上是我的修改后的文件,你需要修改两行:program,miDebuggerPath,分别是你要调试谁?用什么工具调试?
下面开始调试:
在3 4行打好断点,然后按F5开始调试。具体命令如下:
你也可以使用图形窗口来调试:
到此,我们就讲解完了Windows下vscode的配置调试。
vscode是一个强大的工具,不止C/C++.........任重而道远。
其他
vscode调试依赖launch.json,编译依赖tasks.json。
vscode中要分清设置中的‘工作区’ 和‘ 用户 ’ ,这两个概念。前者指的是你打开的某个文件夹,他可以和你用户有不一样的配置。
VSCode开发Linux应用程序
我最近遇到了如下错误:namespace std has no member “mutex”。经过查询发现是我们下载的MingGW版本不支持std::mutex std::condition_variable等Linux API,仅仅可以支持std::cout std::endl;等API。
于是回到这个位置:E:\software\forVSCode。
shift+delete掉旧的mingw64,然后下载下述图片中的压缩包,重新解压缩,其他均不必改变。MinGW的版本为:
下载链接
这样Linux API也可以在VSCode上使用了 。
注意:初学者大概率遇不到Linux API,所以这个章节可以忽略,以后用到现用现查。
拓展
clangd插件
最终的json文件
c_cpp_properties.json
{
"configurations": [
{
"name": "Win32",
"includePath": [
"${default}"
],
"defines": [
"_DEBUG",
"UNICODE",
"_UNICODE"
],
"cStandard": "c17",
"cppStandard": "gnu++17",
"intelliSenseMode": "gcc-x64",
"compilerPath": "E:\\software\\forVSCode\\mingw64\\bin\\gcc.exe"
},
{
"name": "C++",
"includePath": [
"${default}"
],
"defines": [
"_DEBUG",
"UNICODE",
"_UNICODE"
],
"cStandard": "c17",
"cppStandard": "c++20",
"intelliSenseMode": "gcc-x64",
"compilerPath": "E:\\software\\forVSCode\\mingw64\\bin\\g++.exe"
}
],
"version": 4
}
launch.json
{
"version": "0.2.0",
"configurations": [
{
"name": "(gdb) 启动",
"type": "cppdbg",
"request": "launch",
"program": "${fileDirname}/${fileBasenameNoExtension}.exe", //调试谁?当然是tasks.json生成的可执行文件
"args": [],
"stopAtEntry": false,
"cwd": "${fileDirname}",
"environment": [],
"externalConsole": false,
"MIMode": "gdb",
"miDebuggerPath": "E:\\software\\forVSCode\\mingw64\\bin\\gdb.exe", //用谁调试,我们使用mingw下的gdb.exe
"setupCommands": [
{
"description": "为 gdb 启用整齐打印",
"text": "-enable-pretty-printing",
"ignoreFailures": true
},
{
"description": "将反汇编风格设置为 Intel",
"text": "-gdb-set disassembly-flavor intel",
"ignoreFailures": true
}
]
}
]
}
tasks.json
{
"version": "2.0.0",
"tasks": [
{
"type": "cppbuild",
"label": "C/C++: gcc.exe 生成活动文件",
"command": "E:/software/forVSCode/mingw64/bin/gcc.exe",
"args": [
"-fdiagnostics-color=always",
"-g",
"${file}",
"-o",
"${fileDirname}/${fileBasenameNoExtension}.exe"
],
"options": {
"cwd": "E:/software/forVSCode/mingw64/bin"
},
"problemMatcher": [
"$gcc"
],
"group": "build",
"detail": "编译器:E:/software/forVSCode/mingw64/bin/gcc.exe"
},
{
"type": "cppbuild",
"label": "C/C++: g++.exe 生成活动文件",
"command": "E:\\mingw_bulids\\mingw64\\bin\\g++.exe",
"args": [
"-fdiagnostics-color=always",
"-g",
"${file}",
"-o",
"${fileDirname}\\${fileBasenameNoExtension}.exe"
],
"options": {
"cwd": "${fileDirname}"
},
"problemMatcher": [
"$gcc"
],
"group": "build",
"detail": "编译器: E:/software/forVSCode/mingw64/bin/g++.exe"
}
]
}