作者:__lifanxin
链接:https://blog.csdn.net/A951860555/article/details/109175215
来源:CSDN
著作权归作者所有,任何形式的转载都请联系作者。
说在前面
本文是从官方文档以及实际操作中总结而来,对于从事该行业的专业人员来说,推荐多看官方英文文档;当然对于初学者而言,先行阅读一个较好的中文指导博客也是无可厚非的。
链接: vscode C/C++环境配置官方文档.
正式起步
安装gcc组件
windows下可以下载mingw-w64,关于mingw-w64的说明可以参见百度百科。而对于大多数linux系统而言,一般都自带有gcc、g++的编译环境,所有如果你正在使用常见的ubuntu系统、mac系统的话就不需要安装。
添加环境变量
这一步是需要windows用户单独操作的,也就是并不自带gcc组件的系统。
添加环境变量的步骤很简单,首先找到正确的gcc组件所在的bin目录,也就是说目录路径只能到bin
为止,而不能明确到gcc
,因为在bin目录下不止有gcc,还有g++、gdb等程序。然后在win10系统中可以直接搜索环境变量
,添加到系统变量或者用户变量的path
即中。
在添加环境变量后,我们就可以在终端中直接输入gcc --version
等命令,如果显示版本信息即可证明添加成功。这是因为本来在终端需要执行一个命令就是在path
环境变量中去查找该命令程序的所在目录,一般系统都会自动配置一些程序路径在这里,所以像自带gcc组件的ubuntu和mac这些早已配置好了相应环境变量的系统,不用配置也能在终端执行相应命令。当然我们之所以需要在这里添加环境变量,只是为了方便后面vscode自动生成一些配置文件时可以找到gcc、g++的路径。
创建helloworld项目
下面我们开始用helloworld项目来完善我们的配置。
新建一个test文件夹,在文件下新建hello.c
或者hello.cpp
,一个用于C语言,一个用于C++。接下来就是最关键的配置文件生成部分。
hello.c
#include <stdio.h>
int main(void)
{
printf("hello, world\n");
return 0;
}
hello.cpp
#include <iostream>
int main(void)
{
using namespace std;
cout << "hello, world!" << endl;
return 0;
}
生成编译配置文件
编译配置-->tasks.json
首先,选中.p
或者.cpp
文件,也就是一定要在vscode中打开相应的源代码文件(否则不会出现如下第二张图的模板文件选项),然后按照下图一中进行操作,点击Terminal-->Configure Tasks或者Configure Default Build Task。
接下来会出现vscode自带的模板文件选项,是C就选择
gcc.exe
,是C++就选择g++.exe
。不同的系统展示会略有区别,如下是ubuntu系统所示,会展示详细的compiler信息来帮助我们进行选择。
选中相应的模板文件后,会在当前目录下生成.vscode文件夹,里面会出现tasks.json文件,该文件即对应执行程序编译的配置文件,其内容如下:
windows下tasks.json
{
"version": "2.0.0",
"tasks": [
{
"type": "shell",
"label": "C/C++: g++.exe build active file",
"command": "C:\\Program Files\\mingw-w64\\x86_64-8.1.0-posix-seh-rt_v6-rev0\\bin\\g++.exe",
"args": [
"-g",
"${file}",
"-o",
"${fileDirname}\\${fileBasenameNoExtension}.exe"
],
"options": {
"cwd": "${workspaceFolder}"
},
"problemMatcher": [
"$gcc"
],
"group": {
"kind": "build",
"isDefault": true
}
}
]
}
ubuntu下tasks.json
{
"version": "2.0.0",
"tasks": [
{
"type": "cppbuild",
"label": "C/C++: g++ build active file",
"command": "/usr/bin/g++",
"args": [
"-g",
"${file}",
"-o",
"${fileDirname}/${fileBasenameNoExtension}"
],
"options": {
"cwd": "/usr/bin"
},
"problemMatcher": [
"$gcc"
],
"group": {
"kind": "build",
"isDefault": true
},
"detail": "compiler: /usr/bin/g++"
}
]
}
关键键值名
上面的两个文件大同小异,对于json文件中的健我们可以直接在vscode中通过鼠标的悬停来进行了解,不过这里我们着重了解一些关键的健值就行了。
- label
可以理解为tasks
这个健所对应数组中第一个配置对象的名字,也就是说我们还可以在此数组中配置第二个编译指令,如下图所示,注意label标签名的不同且两个配置之间有逗号隔开。所以如果你有在同一个项目中配置不同编译的需要,就可以这样配置。
以windows下tasks.json为例,其它系统也一样
{
"version": "2.0.0",
"tasks": [
{
"type": "shell",
"label": "C/C++: g++.exe build active file",
"command": "C:\\Program Files\\mingw-w64\\x86_64-8.1.0-posix-seh-rt_v6-rev0\\bin\\g++.exe",
"args": [
"-g",
"${file}",
"-o",
"${fileDirname}\\${fileBasenameNoExtension}.exe"
],
"options": {
"cwd": "${workspaceFolder}"
},
"problemMatcher": [
"$gcc"
],
"group": {
"kind": "build",
"isDefault": true
}
},
{
"type": "shell",
"label": "C/C++: NEW g++.exe build active file",
"command": "C:\\Program Files\\mingw-w64\\x86_64-8.1.0-posix-seh-rt_v6-rev0\\bin\\g++.exe",
"args": [
"-g",
"${file}",
"-o",
"${fileDirname}\\${fileBasenameNoExtension}.exe"
],
"options": {
"cwd": "${workspaceFolder}"
},
"problemMatcher": [
"$gcc"
],
"group": {
"kind": "build",
"isDefault": true
}
}
]
}
- command
顾名思义就是编译所需要的程序命令,如果之前配置好了环境变量,那么就会自动生成该路径,否则需要自己手动配置。上图中,windows的tasks.json中command
是我自己电脑上的gcc路径,而ubuntu使用自己的系统环境路径/usr/bin/g++
。注意linux系统中的程序没有后缀名.exe
。
当然如果编译C就使用gcc,编译C++就使用g++,当然用gcc也可以编译C++程序源代码,不过需要加上链接库-lstdc++
,否则会报找不到C++特定库中方法的错误。该参数需要添加在下面的args字段中。 - args
args字段实际上就是gcc、g++命令的参数,也就是说如果通过终端使用gcc编译C++源代码文件,需要输入gcc -g hello.c -o hello.exe -lstdc++
,-g
表明启用调试(然后可以在终端使用gdb进行调试,否则不行),-o
是指定输出文件的名字(否则自动为a.out),-lstdc++
指明链接C++的库(否则编译报错)。
因此vscode就是把该终端命令分成了两部分,command
指明了所使用的程序,args
指明了后面接的参数。当然vscode中使用了一些特定的标签名,${file}
代表在vscode中呈现在活动界面即当前打开且被选中的文件;"${fileDirname}\\${fileBasenameNoExtension}.exe
中${fileDirname}
是一个变量名,代表被选中文件所在的文件夹,windows下用双反斜杠\\
隔开路径(第一个反斜杠表示转义,即双反斜杠在json才代表一个\
,\
是windows路径下的分隔符,否则在json中使用\
会转义字符$
),然后${fileBasenameNoExtension}.exe
表示使用被选中的文件名但不用其扩展名,然后以后缀.exe
作为扩展名;而ubuntu下使用的是斜杠/
分割路径,并且没有后缀名,当然在vscode还有更多的变量名,可以参考官方文档:
tasks.json完整配置
windows下tasks.json完整配置如下图所示,ubuntu见上图第一次给出的tasks.json文件:
{
"version": "2.0.0",
"tasks": [
{
"type": "shell",
"label": "C/C++: g++.exe build active file",
// 使用自己电脑上的路径
"command": "C:\\Program Files\\mingw-w64\\x86_64-8.1.0-posix-seh-rt_v6-rev0\\bin\\g++.exe",
"args": [
"-g",
// 想编译当前文件夹下所有.cpp文件可以这样写
// "${fileDirname}\\*.cpp"
"${file}",
"-o",
"${fileDirname}\\${fileBasenameNoExtension}.exe"
],
"options": {
"cwd": "${workspaceFolder}"
},
"problemMatcher": [
"$gcc"
],
"group": {
"kind": "build",
"isDefault": true
}
}
]
}
启动编译
如下图所示,点击Terminal-->Run Build Task执行默认的编译选项(Run Task 会列出所有的编译配置选项),此操作会使用我们之前配置好的tasks.json文件来对源代码进行编译,在windows下生成hello.exe文件,ubuntu下生成的程序则没有后缀名。
至此,我们的C/C++的编译环境已经配好,windows下在终端输入
./hello.exe
,ubuntu下输入./hello
即可运行程序。下面进入调试环境的配置。
生成调试配置文件
调试配置-->launch.json
同上面一样,选中需要进行debug调试的文件,按照下图所示点击Run-->Add Configuration即可在.vscode文件夹下生成launch.json文件。
windows下launch.json
{
// Use IntelliSense to learn about possible attributes.
// Hover to view descriptions of existing attributes.
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "(gdb) 启动",
"type": "cppdbg",
"request": "launch",
"program": "输入程序名称,例如 ${workspaceFolder}/a.exe",
"args": [],
"stopAtEntry": false,
"cwd": "${workspaceFolder}",
"environment": [],
"externalConsole": false,
"MIMode": "gdb",
"miDebuggerPath": "/path/to/gdb",
"setupCommands": [
{
"description": "为 gdb 启用整齐打印",
"text": "-enable-pretty-printing",
"ignoreFailures": true
}
]
}
]
}
ubuntu下launch.json
{
// Use IntelliSense to learn about possible attributes.
// Hover to view descriptions of existing attributes.
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "g++ - Build and debug active file",
"type": "cppdbg",
"request": "launch",
"program": "${fileDirname}/${fileBasenameNoExtension}",
"args": [],
"stopAtEntry": false,
"cwd": "${workspaceFolder}",
"environment": [],
"externalConsole": false,
"MIMode": "gdb",
"setupCommands": [
{
"description": "Enable pretty-printing for gdb",
"text": "-enable-pretty-printing",
"ignoreFailures": true
}
],
"preLaunchTask": "C/C++: g++ build active file",
"miDebuggerPath": "/bin/gdb"
}
]
}
关键键值名
如上图所示,在ubuntu下可能已经自动生成好了完整的debug调试配置,如果没有也没关系,按照下面的操作进行就行。
- name
该json配置对象的名字。同样也可以在此为launch.json配置多个debug调试对象,添加方式和tasks.json一样,只需要把配置放在Configurations
数组中,命名一个不同的name
。 - program
指明你需要调试的程序名,即上一步编译生成的可执行文件,该字段内的内容需要重新编写,自动生成的内容已给出了示例:${workspaceFolder}\\a.exe
。其中${workspaceFolder}
表示在vscode中所打开的根文件夹,可以替换为${fileDirname}
表示打开文件所在的文件夹;a.exe
应该替换为自己需要调试的程序名,或者改为${fileBasenameNoExtension}.exe
自动衔接上文tasks.json生成的程序名,这里还应当注意程序所在的目录路径是否相符合。注意ubuntu下使用/
分隔路径,程序名不加.exe
后缀。 - args
args中是gdb命令所需要的参数,一般不用写,有特殊需要的可以在网上查找相关的资料。 - MIMode
指明调试所使用的程序,按照默认设置为gdb即可。 - miDebuggerPath
指明调试程序的路径,在这里需要更改为自己的gdb路径且要包括gdb.exe此程序名字,例如我的:C:\\Program Files\\mingw-w64\\x86_64-8.1.0-posix-seh-rt_v6-rev0\\bin\\gdb.exe
。ubuntu下为/usr/bin/gdb
或者/bin/gdb
。 - preLaunchTask
这个键值在上面windows自动生成的配置中并没有出现,需要自己配置一下(和上图ubuntu中的配置一样)。该键值的目的是指出在执行debug调试之前需要执行的tasks
任务,也就是tasks.json下的某个编译指令。在这里,我们将preLaunchTask
键值设为C/C++: g++.exe build active file
即对应我们之前配置好的tasks.json中的label标签名,这样一来我们在直接debug时就可以自动运行相应的编译指令,而不用每次都要先编译一下,然后再debug调试。
launch.json完整配置
下面给出windows下完整的launch.json配置,ubuntu完整配置见上图第一次给出的launch.json:
{
// Use IntelliSense to learn about possible attributes.
// Hover to view descriptions of existing attributes.
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "(gdb) 启动",
"type": "cppdbg",
"request": "launch",
"program": "${workspaceFolder}\\${fileBasenameNoExtension}.exe",
"args": [],
"stopAtEntry": false,
"cwd": "${workspaceFolder}",
"environment": [],
"externalConsole": false,
"MIMode": "gdb",
// 替换为自己电脑上的gdb路径
"miDebuggerPath": "C:\\Program Files\\mingw-w64\\x86_64-8.1.0-posix-seh-rt_v6-rev0\\bin\\gdb.exe`",
"setupCommands": [
{
"description": "为 gdb 启用整齐打印",
"text": "-enable-pretty-printing",
"ignoreFailures": true
}
],
// 要和tasks.json中的label标签名对应
"preLaunchTask": "C/C++: g++.exe build active file"
}
]
}
启动调试
如下图所示,点击Run-->Start Debugging,即会按照launch.json文件配置来对相应的程序进行debug。
在调试的时候给程序打好断点,如下图所示,我对代码略微进行了修改,声明了num变量,运行debug调试后,点击有个虫子(bug)样式的图标,然后在左侧栏就可以看到变量的值。
结束语
经过上面一番折腾,我们已经配置好C/C++程序的编译和调试环境,当然如果需要在其它项目中应用相同的环境配置,可以直接复制.vscode到其它项目的根目录下即可。那么,现在就开始愉快的编程吧!