声明:仅为个人学习总结,还请批判性查看,如有不同观点,欢迎交流。
摘要
内容主要包括:下载安装 VS Code 和 C++ 插件、创建运行 Hello World 项目、.json 配置文件说明。
目录
1 系统环境
1.1 环境检测
VS Code 是一个编辑器,用来编辑源代码,我们还需要 g++ 来编译源代码,需要 GDB 来调试程序。
在配置 VS Code 开发环境之前,需要确保 GCC 已经安装,可以在命令行工具中运行以下命令:
gcc -v
如果还没有安装 GCC,可以依次运行以下命令,首先更新软件包列表,然后安装 GNU 编译工具和 GDB 调试器。
sudo apt update
sudo apt install build-essential gdb
1.2 环境说明
本文描述的 VS Code 开发环境,基于以下系统环境进行配置:
序号 | 工具 | 版本 |
---|---|---|
1 | VMware | 16.1.2 |
2 | Ubuntu 桌面版 | 20.04.1-desktop-amd64 |
3 | build-essential | 12.8ubuntu1.1 |
3.1 | gcc | 9.4.0 |
3.2 | g++ | 9.4.0 |
3.3 | gdb | 9.2 |
关于系统环境配置,可以参考:C/C++实战专栏:第01章 软件开发环境配置 => 2 安装 VMware 虚拟机、3 安装 Ubuntu 系统
本文安装的 VS Code 及 C++ 插件版本如下:(对于不同的版本,下文截图中的界面可能会有所不同)
序号 | 工具 | 版本 |
---|---|---|
+1 | VS Code | 1.83.1-1696982868_amd64 |
+2 | C++ 插件 | 1.17.5 |
2 下载安装 VS Code
参考 官方文档,可以选择两种安装方式:使用 .deb 安装包、使用 snap 安装包。
2.1 使用 .deb 安装包
- 进入 下载页面,选择下载:.deb(Arm64 版本)(当前下载文件为:code_1.83.1-1696982868_amd64.deb);
- 在命令行中运行以下命令,或者直接双击 *.deb 文件进行安装。
sudo apt install ./<file>.deb
通过 .deb 安装,默认会使用系统的包管理器维护更新。
2.2 使用 snap 安装包
- 可以在命令行中运行以下命令:
sudo snap install --classic code
- 也可以在“Ubuntu 软件中心”搜索
code
进行安装。
通过 Snap 安装,Snap 守护进程会在后台自动更新。
2.3 启动 VS Code
- 可以在 “Activities 搜索栏”中输入
Visual Studio Code
,点击图标启动 VS Code; - 也可以在命令行中输入
code
启动 VS Code。
如果需要,可以参考 官方文档 熟悉用户界面。
3 安装 C++ 插件
参考 官方文档,按照以下步骤安装 C++ 插件(C++ extension)。
- 启动 VS Code;
- 选择“扩展视图”图标,或使用快捷键(Ctrl+Shift+X);
- 搜索
C++
,找到“C/C++”插件; - 选择安装。
4 在 VS Code 中使用 C++
下文参考 官方文档,通过 Hello World 项目,初步介绍 VS Code 中的 C++ 开发。
4.1 创建 Hello World 项目
在 Terminal 中依次运行以下命令,创建 helloworld
文件夹,并在其中打开 VS Code:
mkdir helloworld
cd helloworld
code .
命令 code .
会将项目文件夹(project folder) helloworld
变为工作区(workspace),稍后我们会在工作区的 .vscode
子文件夹中创建 3 个文件:
tasks.json
,编译器构建设置(compiler build settings);launch.json
,调试器设置(debugger settings);c_cpp_properties.json
,编译器路径和 IntelliSense 等设置(compiler path and IntelliSense settings)。
4.2 添加 Hello World 源文件
-
创建
helloworld.cpp
文件;
-
在
helloworld.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;
}
4.3 运行 helloworld.cpp
-
打开
helloworld.cpp
,让它变为当前的 active 文件; -
从配置列表中选择 “C/C++:g++ build and debug active file”;
- 只会在第一次运行/调试
helloworld.cpp
时,被要求选择编译器; - 当前选择会被记录在
tasks.json
文件中,作为后续运行/调试的默认配置。
- 只会在第一次运行/调试
-
成功编译运行后,会在集成的 Terminal 中,显示程序输出信息;
4.4 关于 tasks.json
第一次运行程序时,C++ 插件会在项目的 .vscode
文件夹中创建 tasks.json
文件,用于保存构建配置(build configurations)。
文件 tasks.json
中的部分变量说明如下:(可以在 官方文档 中查看更多信息)
command
,指定要运行的程序,当前为 g++;args
数组,指定要传递给 g++ 的命令行参数(按编译器期望的顺序);${file}
,指定需要编译的文件为“当前的 active 文件”(如helloworld.cpp
);- 使用
${workspaceFolder}/*.cpp
替换${file}
,会编译工作区(项目)文件夹中的所有.cpp
文件。
- 使用
${fileDirname}/${fileBasenameNoExtension}
,指定生成的可执行文件:位于当前目录(active 文件所在文件夹)下,与 active 文件同名但没有扩展名(如helloworld
)。- 可以使用其它输出路径和文件名(如
helloworld.out
)替换${fileDirname}/${fileBasenameNoExtension}
。
- 可以使用其它输出路径和文件名(如
label
,指定在任务列表中显示的任务名称(可以根据需要自定义);detail
,指定在任务列表中显示的任务描述(建议进行修改以区分相似的任务);- 可以在
tasks.json
中定义多个构建任务,对于“非默认构建的任务”,将其group
中的isDefault
设置为false
。
4.5 关于 launch.json
点击编辑器右上角的 “Debug C/C++ File”,可以对程序进行调试。
通过 launch.json
可以自定义调试配置(例如,指定运行时传递给程序的参数):
-
点击编辑器右上角的 “Add Debug Configuration”;
-
从配置列表中选择 “C/C++:g++ build and debug active file”;
-
此时会创建
launch.json
文件,并将其作为后续使用的调试配置。
文件 launch.json
中的部分变量说明如下:(可以在 官方文档 中查看更多信息)
program
,指定要调试的程序,与tasks.json
中的“可执行文件”保持一致;args
,是一个参数数组,会在运行时传递给程序;stopAtEntry
,如果将其设置为true
,在开始调试时,调试器会停止在main
方法上。
4.6 关于 c_cpp_properties.json
通过 c_cpp_properties.json
文件,可以修改 C++ 插件的相关设置,例如编译器的路径、头文件包含路径、C++ 标准等等。
-
可以通过命令面板(快捷键 Ctrl+Shift+P)运行命令 C/C++: Edit Configurations (UI),查看 C/C++ 配置 UI
-
运行上述命令后,会打开 C/C++ 配置页面,并创建
c_cpp_properties.json
文件
(C/C++ 配置页面与c_cpp_properties.json
中的配置会同步更新)
-
如果程序包含的头文件既不在工作区,也不在标准库路径中,可以修改 Include path 设置
-
当前默认的 C 标准是 C17,默认的 C++ 标准是 gnu++14
-
文件
c_cpp_properties.json
中的默认设置如下图:
4.7 复用 .json 文件
上述 .json 配置文件仅适用于当前工作区,如果要复用配置,只需要:
- 将 JSON 文件复制到新的项目文件夹(工作区)的
.vscode
子文件夹中; - 根据需要做适当调整,例如修改源文件和可执行文件的名称。
I’m the ENDing, nice to meet you here! Hope this article has been helpful.