1、前景知识介绍
本篇博客介绍如何在 Ubuntu 20.04 环境下,配置 Visual Studio Code,从而使用 GCC (C++ compiler (g++)) 和 GDB (debugger)。
这里介绍一下,GCC 表示 GNU Compiler Collection 编译器集合; GDB 是 GNU debugger。
GCC,它可以编译C、C++、JAV、Fortran、Pascal、Object-C等语言。gcc 是 GCC 中的 GNU C Compiler(C 编译器),g++ 是GCC中的GNU C++ Compiler(C++编译器)。
gcc 和 g++ 存在些许的区别,想要了解可以查看博客
2、预先准备条件
在创建项目之前,我们需要准备 3 个工作。
- 安装 VS Code
- 在 VS Code 中安装 C++ extension
- 确保 Ubuntu 中安装了 GCC(GNC Compiler Collection)
安装 VS Code 去官网 下载 .deb,将下载完成的 .deb 文件使用 dpkg -i 文件名.deb
安装即可。
安装 VS Code 完成后,进入软件,安装 C++ extension 过程如下图所示:
确保 GCC 在 Ubuntu 系统已经安装。 VS Code 编译、运行、调试 C++ 项目,需要确保 Ubuntu 系统中已经存在 GCC 和 GDB,倘若不存在可以使用 apt-get 命令安装。
首先,使用命令 gcc -v
查看系统中是否存在 GCC,倘若存在的话,那么 GCC 版本将会在命令行中给出。
如果,GCC不存在,我们考虑安装
sudo apt-get update # 更新 apt-get 工具,如果不更新可能会影响某些 package
sudo apt-get install build-essential gdb # 安装 GNU Compiler 工具和 GDB调试
3、创建 Hello World 项目
创建打开项目
首先,打开 Terminal
创建项目文件夹。而后,使用 VS Code 将项目文件夹打开
mkdir projects # 总的 VS Code 项目文件夹,可以不创建,但是一个总的文件夹,可以方便以后你查找项目
cd projects
mkdir helloworld # 用于这次项目的文件夹 Hello World
cd helloworld # 进入到该文件夹
code . # 在该文件夹内打开 VS Code,该文件夹就相当于 Workspace
如果你按照本篇博客的思路走,你将会在 Workspace
中 .vscode
目录下创建 3 个文件
-
tasks.json
(compiler build settings) -
launch.json
(debugger settings) -
c_cpp_properties.json
(compiler path and IntelliSense settings)
创建 C++ 文件
在项目中 New File,并将其命名为 helloworld.cpp
可以将以下代码复制到 cpp 文件中,进行测试
#include <iostream>
#include <vector>
#include <string>
using namespace std;
int main()
{
vector<string> msg {"Hello", "C++", "World", "from", "VS Code", "and the C++ extension!"};
for (const string& word : msg)
{
cout << word << " ";
}
cout << endl;
}
每次修改完文件,记得使用 ctrl + s
保存文件。
4、运行 Hello World 项目
在运行 Hello World 项目前,需要确保 Ubuntu 系统中已经有了 C++ compiler,虽然 VS Code 中已经下载了 C++ extension,但是他调用的仍然是系统的 C++ compiler 和 C++ Debuger。
运行 Hello World
首先,我们选中 cpp
文件,将其打开,并点击 play
按钮
然后,从 VSCode
所检测的 Compiler
中选择 g++ build and debug active file
。并且只有当你第一次运行项目是需要选择 compiler
。此后 compiler
信息会被存储在 task.json
文件中作为 default
。
终端 teriminal
会输出结果信息。
第一次运行时,之前在 VS Code 中下载的 C++ extension
会自动在 .vscode
文件夹中生成 task.json
文件,该文件存储了项目的 build 配置信息。
你的 task.json
文件应当和下方给出的形式类似。
{
"tasks": [
{
"type": "cppbuild",
"label": "C/C++: g++ 生成活动文件",
"command": "/usr/bin/g++",
"args": [
"-fdiagnostics-color=always",
"-g",
"${file}",
"-o",
"${fileDirname}/${fileBasenameNoExtension}"
],
"options": {
"cwd": "${fileDirname}"
},
"problemMatcher": [
"$gcc"
],
"group": {
"kind": "build",
"isDefault": true
},
"detail": "调试器生成的任务。"
}
],
"version": "2.0.0"
}
json 文件参数介绍
前文给出了 json 中,详细的介绍以下他的参数。command
指定了项目运行的程序,在这个例子中是 g++
,并给出了绝对路径args
指定了 传递给 command
指定程序 (本次是g++
) 的参数,并且这些参数需要按照顺序给出。
如本项目执行时候应该是 /usr/bin/g++ -g ${file} -o ${fileDirname}/${fileBasenameNoExtension}
。 其中-g
选项告诉GCC
产生能被GNU
调试器使用的调试信息,以调试程序。结合 -o
产生带调试信息的可执行文件test(o小写)。
task.json
文件是告诉 g++ 对 ${file}
文件处理,编译,并在 ${fileDirname}
文件夹内产生一个和${file}
同名,但是没有扩展名称的可执行文件${fileBasenameNoExtension}
,对于本次就是 helloworld
。
label
是在 tasks list 显示的文字,你可以给他任意命名。
detail
是在 tasks list 中该 task 的描述信息,强烈推荐在相同的 tasks 任务中,使用 details 将他们区分。
你可以修改 tasks.json 来 build 多个 C++ 文件,通过使用 参数像是 ${workspaceFolder}/*cpp
而不是${file}
。这将会build所有的 cpp 文件在当前的 文件夹下。
同时,你也可以将输出文件名称${fileDirname}/${fileBasenameNoExtension}
修改为helloworld.out
参考链接