0%

为VSCode配置C/C++开发环境

随着微软不断的更新,VSCode功能越来越强大,其操作简单且跨平台,因此深受开发者们的喜欢。你可以使用它在各个不同的平台(Windows、Linux、Mac)编写各种不同语言的代码,如Python、JavaScript、C/C++……

但有一些同学还不清楚如何用它来编译、调试C/C++程序,本文就向你介绍一下。

VSCode调试程序的机制

在我们开始配置C/C++开发环境之前,我们先来了解一下VSCode调试程序的基本步骤,这样有利于我们遇到调试问题可以及时的找到解决办法。

在开发调VSCode之前,我们先来看一下Linux下编译和调试C/C++程序的过程,具体如下:

  • gcc编译C/C++程序,编译时带上-g参数,指明生成符号表
  • 使用 gdb 启动程序,进行调试交互界面
  • 在调试交互界面中设置断点
  • 执行run 命令

实际上,VSCode也是按照这个步骤来的,只不过由于VSCodes可以编译调试多种程序,如C/C++、Java、JavaScript等,因此在使用它编译调试程序之前,你要先告诉它你要编译的是哪种程序,使用的编译器和调试工具是什么,为此我们需要为其编写几个配置文件。

第一个配置文件是launch.json,该配置文件的作用是告诉VSCode使用的调试工具是什么,编译配置文件tasks.json所在的位置等。第二个配置文件是tasks.json,它的作用是指定编译器和编译参数。

另外,如果用户的调试工作没有特殊需求的话,VSCode还可以根据用户指定的编译器自动为其项目生成launch.json,因此用户只需要编写tasks.json文件即可。

接下来我们就来看看在VSCode中如何编写tasks.json文件。

配置C/C++编译环境

首先,需要为其添加一个C/C++扩展,具体步骤如下图所示:

第二步,添加编译、运行配置文件,如下图所示:

当执行上面步骤后,你就可以在VSCode左侧文件列表栏中的.vscode下发现tasks.json文件了。其内容如下:

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
{
"tasks": [
{
"type": "cppbuild",
"label": "C/C++: clang 生成活动文件",
"command": "/usr/bin/clang", #指定编译器
"args": [
"-fcolor-diagnostics", #这项没什么用
"-fansi-escape-codes", #这项也没什么用
"-g", #告诉编译器,编译出的是DEBUG版本的程序
"${file}", #C/C++源文件
"-o", #用-o指定编译后输出的文件名
"${fileDirname}/${fileBasenameNoExtension}" #输出的文件名
],
"options": {
"cwd": "${fileDirname}"
},
"problemMatcher": [
"$gcc"
],
"group": {
"kind": "build",
"isDefault": true
},
"detail": "调试器生成的任务。"
}
],
"version": "2.0.0"
}

在上面的配置中,有两个字段特别重要,一个是command另一个是args,其中command指明使用的编译器,在不同的平台下编译器是不同的,例如在Mac下使用的是clang,在Linux下使用的编译器是gcc,而在Windows下使用的是cl.exe。args为编译器指定输入参数,如-g 告诉编译器编出的程序是debug版本,-o告诉编译器编译出的文件名的名子。

此外我们还能通过args为编译器提供其它参数,如我们依赖的库和头文件等。举个列子,如果我们依赖ffmpeg库,则可以通过下面的方式将所依赖的库告诉编译器:

1
2
3
4
5
6
7
8
...
"args":[
...
"-I /usr/local/ffmpeg/include",
"-L /usr/local/ffmpeg/lib",
"-lavutil -lavdevice -lavformat -lavcodec"
]
...

其中,-I指定依赖库的头文件路径;-L指定依赖库所在的路径;-l指定具体的依赖库。

手动执行任务

通过上面的配置一般情况下就可以正常调试程序了,但有的时候会出现些莫名其妙的问题,此时就需要我们手动执行一下编译任务了,具体操作如下:

当程序重新编译成功后,我们再次偿试Debug就可以成功了。

配置C/C++编辑环境

除了上面的编译环境需要配置外,使用VSCode编辑C/C++代码时还要配置编辑环境。主要的原因是引入外部库时,如果不在编辑环境中指定外部库的头文件路径,那它就会一直提示我们找不到头文件。

该如何配置C/C++编辑环境呢?最简单的做法是在我们添加新的头文件时,当VSCode报错时,我们来配置C/C++环境。具体步骤如下:


当执行完上面的操作后,就可以看到c_cpp_properties.json文件了,该文件的内容如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
{
"configurations": [
{
"name": "Mac",
"includePath": [
"${workspaceFolder}/**"
],
"defines": [],
"macFrameworkPath": [
"/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/System/Library/Frameworks"
],
"compilerPath": "/usr/bin/clang",
"cStandard": "c17",
"cppStandard": "c++17",
"intelliSenseMode": "macos-clang-arm64"
}
],
"version": 4
}

为了让VSCode编辑器可以正确找到需要的头文件,我们需要在c_cpp_properties.json的includePath字段中加入引入的头文件路径,下面是添加ffmpeg的头文件路径例子:

1
2
3
4
5
6
...
"includePath":[
...
"/usr/local/ffmpeg/include"
]
...

至此,我们就将可以编辑、编译、运行C/C++程序的VSCode环境设置好了。

小结

现在我们小结一下,要想使用VSCode编辑、编译C/C++程序我们需要做三件事儿,第一件事儿是安装C/C++插件;第二件事儿,配置编译环境,也就是配置tasks.json;第三件事儿是配置编辑环境,对应的配置文件为c_cpp_properties.json。当将这三件事儿做好后,我们就可以使用VSCode的愉快的编写C/C++代码了。

附录

下图中是VSCode中一个内置的变量,有时候我们在各种配置文件中会用到这些变量,放在这里方便查阅

欢迎关注我的其它发布渠道