Visual Studio Code (简称 VSCode) 是由微软开发的一款免费、开源、跨平台的代码编辑器。它支持 Windows、macOS 和 Linux 操作系统,并且内置对多种编程语言的支持,包括但不限于 C/C++、Python、JavaScript、TypeScript、Java 和 Go 等。VSCode 主要用于编写、调试和运行代码,并且提供了丰富的扩展支持。
一般vscode配置C++有三个文件,它们分别是:
c_cpp_properties.json 是vscode插件使用的配置文件,主要用于为 C/C++ 项目提供 IntelliSense、编译器路径、包含路径等信息。该文件的主要作用是帮助 VSCode 了解你的开发环境,以便提供更好的代码补全、语法检查和错误提示等功能。
{
"configurations": [
{
"name": "Linux", // 配置的名称, 用于区分平台
"includePath": [
"${workspaceFolder}/**", // 工作区中的所有文件
"/usr/include", // 系统头文件路径
"/usr/local/include" // 本地安装的软件包的头文件路径
],
"defines": [],
"compilerPath": "/usr/bin/gcc", // GCC 编译器的路径
"cStandard": "c17", // 使用 C11 标准
"cppStandard": "gnu++14", // 使用 gnu++14标准
"intelliSenseMode": "linux-gcc-x64", // IntelliSense 模式,适用于 linux GCC 64 位
"compilerArgs": [ // 可选的编译器额外参数
"-Wall",
"-Wextra",
"-Werror"
]
}
],
"version": 4 // vscode插件的配置文件版本号
}
关键字段解释
name: 配置的名称,通常根据使用的平台命名,如 "Linux"、"Win32"、"MacOS" 等。用于区分不同平台或环境的配置。
defines: 预处理器定义,类似于在编译时使用的 -D 选项。可以用于控制条件编译。在 Linux 环境下,常见的预定义宏是 LINUX 或 _LINUX_,有时还会定义调试宏 _DEBUG。
compilerPath: 编译器的路径。在 Linux 下通常是 GCC 编译器,路径可能是 /usr/bin/gcc 或 /usr/bin/clang,具体取决于你使用的编译器。
cStandard: C 语言的标准,可以选择 c89、c99、c11 等。确保选择的标准与项目中使用的编译标准相匹配。
cppStandard: C++ 语言的标准,可以选择 c++11、c++14、c++17、c++20 等。确保与项目的 C++ 标准一致。
intelliSenseMode: IntelliSense 模式,用于指导 VSCode 的智能补全和语法检查。对于 Linux 上的 GCC,可以使用 gcc-x64,如果使用 Clang,则可以选择 clang-x64。
compilerArgs: 可选字段,用于指定编译器的额外参数,例如 -Wall、-Wextra、-Werror 等,用来控制警告和错误的输出。这些参数不会影响实际编译,只用于影响 VSCode 的错误提示和 IntelliSense 行为。
tasks.json 是vscode用于配置编译任务的文件。在 Linux 下,通过 tasks.json 可以为 C/C++ 项目设置自动编译任务,如调用 gcc 或 g++ 来编译源代码。
通过Ctrl+Shift+p,输入Tasks,选择Tasks: Configure Task,然后按回车键,然后选择Create tasks.json file from template,最后选择GCC (适用于 C/C++),一般配置如下:
{
"version": "2.0.0",
"tasks": [
{
"label": "build", // 任务名称
"type": "shell", // 任务类型,使用 shell 命令
"command": "/usr/bin/g++", // 调用的编译器,Linux 下通常是 g++
"args": [
"-g", // 生成调试信息
"${workspaceFolder}/src/*.cpp", // 编译当前打开的文件
"-o", // 输出文件
"${workspaceFolder}/build/${fileBasenameNoExtension}", // 输出文件名,与源文件名相同
"-I/usr/include/eigen3", // 包含 Eigen 库头文件的路径(如果使用包管理器安装)
"-I/path/to/eigen" // 如果手动安装 Eigen,则使用该路径
],
"group": {
"kind": "build",
"isDefault": true // 设为默认构建任务,使用 Ctrl + Shift + B 可直接运行
},
"problemMatcher": ["$gcc"], // 使用 GCC 的问题匹配器来显示编译错误和警告
"detail": "Task for building C++ files" // 任务的详细描述,可选
}
]
}
关键字解释
1. "version":版本号,指定 tasks.json 的文件格式版本。通常使用 "2.0.0"。
2. "tasks":定义一个或多个任务的数组。每个任务是一个编译或执行过程的配置。
3. "label":任务的名称,可以是任意字符串。这个名称会出现在 VSCode 的任务列表中,用户可以通过名称运行该任务。
4. "type":任务的类型,在 Linux 环境下通常使用 "shell",表示这个任务是在终端中通过 shell 命令执行的。
6. "args":命令的参数,这是一个数组,传递给命令行工具(如 g++)的参数。常见参数包括:
-g:生成调试信息,用于调试时需要。
${file}:表示当前打开的源文件的完整路径。
-o:指定输出文件的名称。
${fileDirname}/${fileBasenameNoExtension}:表示输出文件的路径和名称,生成与源文件同名的可执行文件。
7. "group":任务组,允许将任务分组:
"kind": "build":表明这是一个构建任务,通常用于编译代码。
"isDefault": true:表示这是默认的构建任务,使用 Ctrl + Shift + B 时会自动执行此任务。
8. "problemMatcher":问题匹配器,用于将编译器输出的错误和警告信息与 VSCode 关联。对于 GCC 和 G++ 编译器,通常使用 "$gcc"。这会帮助 VSCode 识别编译错误并在编辑器中标记出来。
9. "detail":任务的详细描述,帮助开发者理解任务的用途。这个字段是可选的。
launch.json 是用于配置调试环境的文件。对于在 Linux 环境下调试 C++ 项目,特别是基于 CMake 的项目,launch.json 文件中需要配置如何使用调试器(通常是 GDB),以及指定调试的可执行文件。
通过Ctrl+Shift+P打开命令行,输入输入 Debug: Add Configuration,选择 C++ (GDB/LLDB) 或 C++ (GDB),VSCode 会生成一个基本的 launch.json 文件,并自动将其存放在工作区的 .vscode 文件夹中。配置如下:
{
"version": "0.2.0",
"configurations": [
{
"name": "Launch Program", // 调试配置的名称,任意自定义
"type": "cppdbg", // 指定 C++ 调试类型
"request": "launch", // 请求类型,"launch" 表示启动程序
"program": "${workspaceFolder}/build/${fileBasenameNoExtension}", // 要调试的可执行文件路径
"args": [], // 程序启动时传递的参数(可为空)
"stopAtEntry": false, // 是否在程序入口处暂停
"cwd": "${workspaceFolder}", // 设置工作目录
"environment": [], // 环境变量配置(可为空)
"externalConsole": false, // 是否使用外部终端
"MIMode": "gdb", // 使用的调试器模式,通常是 GDB
"setupCommands": [ // 调试器启动时执行的命令
{
"description": "Enable pretty-printing for gdb",
"text": "-enable-pretty-printing",
"ignoreFailures": true
}
],
"miDebuggerPath": "/usr/bin/gdb", // GDB 调试器路径
"preLaunchTask": "CMake Build", // 调试前执行的任务,一般为构建任务
"internalConsoleOptions": "openOnSessionStart" // 调试控制台的设置
}
]
}
关键配置参数:
args:传递给程序的命令行参数。如果你的程序需要接受参数,可以在此设置,例如 ["arg1", "arg2"]。如果没有参数,则保持为空。
至此,你就可以开始在vscode中编写、编译以及调试C++代码了。
不过上面是VSCode 直接编译任务,使用自带的任务系统可以直接调用编译器(如 g++ 或 gcc),通过配置 tasks.json 来实现编译,适合于小型项目或没有复杂构建需求的项目。而对于一个大型项目一般采用CMake进行编译,CMake 是一个强大的跨平台构建系统,适合管理复杂的项目,特别是有多个源文件、头文件、外部库依赖的项目。为了在 VSCode 中使用 CMake,需要安装以下插件:CMake Tools。然后修改tasks.json文件如下,其他两个文件不用修改。
{
"version": "2.0.0",
"tasks": [
{
"label": "CMake Build", // 任务名称
"type": "shell",
"command": "cmake", // 使用 cmake 命令
"args": [
"--build", // 构建参数
"${workspaceFolder}/build" // 构建文件的输出目录
],
"group": {
"kind": "build",
"isDefault": true // 设置为默认构建任务
},
"problemMatcher": ["$gcc"]
},
{
"label": "CMake Configure", // 任务名称
"type": "shell",
"command": "cmake",
"args": [
"-S", "${workspaceFolder}", // 源目录
"-B", "${workspaceFolder}/build" // 构建目录
],
"group": {
"kind": "build",
"isDefault": false
},
"problemMatcher": []
}
]
}
按 Ctrl + Shift + P,然后选择 CMake: Configure。插件会自动检测到 CMakeLists.txt,并在 build 文件夹中生成构建文件。或者直接进入build文件执行camke ..也可以生成构建文件。
CMakeLists.txt文件如下:
cmake_minimum_required(VERSION 3.10)
set(CMAKE_BUILD_TYPE Debug) # 确保在Debug模式下编译
# 设置项目名称和语言
project(EigenExample)
# 查找 Eigen3
find_package(Eigen3 3.3 REQUIRED NO_MODULE)
# 指定要生成的可执行文件
add_executable(eigen_example ./src/cpp_matrix_operation.cpp)
# 将 Eigen3 的头文件包含到项目中
target_link_libraries(eigen_example Eigen3::Eigen)
Debug界面如下:
调试前安装一下插件Python Debugger。
VSCode调试python代码比较简单,首先打开命令面板:按 Ctrl + Shift + P,输入 Python: Select Interpreter 并选择你要使用的 Python 解释器。如果你使用的是系统 Python 3,通常路径是 /usr/bin/python3。然后按 F5 启动调试器,选择Python Debugger,然后选择Python File,最后就可以直接调试了。