基于Linux下的vscode c/c++开发环境搭建详细教程

vscode是文本编辑而非集成开发环境,需要经过配置才能在其上编译执行代码。本教程将具体详解在linux上配置Visual Studio Code使用GCC C++ 编译器(g++)和GDB调试器的方法(GCC是GNU 编译器集合,GDB则是 GNU调试器)。 配置vscode后,将通过在VSCode中编译和调试一个简单的 C++程序告知您具体该如何操作。

一、先决条件

  1. 安装Visual Studio Code.
  2. 安装C++拓展。点击在vscode界面最左侧的Extensions图标(打开快捷键:ctrl+shift+X),搜索"C/C++",点击进行安装。(所有三个c/c++相关的全部安装)

检查是否安装了gcc编译器(终端输入gcc -v)如果能够正确打印出当前gcc的版本信息,则表示已经预装。若没有预装,则用如下命令安装安装 GNU 编译器工具和 GDB 调试器:

XML 复制代码
sudo apt update # 更新软件包源 
sudo apt-get install build-essential gdb

二、配置相应环境

项目的配置文件位于.vscode文件夹下。在后续教程中,将具体说明在vscode中如何操作生成.vscode 文件夹下的三个配置文件:

tasks.json (compiler build settings) ,负责编译

launch.json (debugger settings),负责调试

c_cpp_properties.json (compiler path and IntelliSense settings),负责更改路径等设置

当然,也可以直接复制配置文件中的内容,以新建文件的方式生成配置文件。后续会对文件中的一些重要关键字进行解读,了解配置文件中内容的具体作用。

2.1 编译 Build
创建 tasks.json

在.vscode下创建tasks.json文件,它的作用是告诉 VS Code 如何构建(编译)程序,将调用 g++编译器从源代码创建一个可执行文件。 在上方的主菜单中,选择 Terminal >Configure Default Build Task ,将出现一个下拉菜单,显示 C++ 编译器的各种预定义编译任务。选择 C/C++: g++ build active file

上述操作将自动在.vscode文件夹下生成tasks.json文件。当然也可以在Explorer视图中新建文件,将下面代码复制进去,手动生成tasks.json,教程后面的配置文件也均可这样生成。其中代码类似如下:

cpp 复制代码
{
    "tasks": [
        {
            "type": "cppbuild",
            "label": "C/C++: g++ build active file",
            "command": "/usr/bin/g++",
            "args": [
                "-fdiagnostics-color=always",
                "-g",
                // "${file}",
                "${workspaceFolder}/*.cpp",
                "-o",
                "${fileDirname}/a.out"
            ],
            "options": {
                "cwd": "${fileDirname}"
            },
            "problemMatcher": [
                "$gcc"
            ],
            "group": {
                "kind": "build",
                "isDefault": true
            },
            "detail": "调试器生成的任务。"
        },

    ],
    "version": "2.0.0"
}

注: VScode支持使用 ${variableName} 语法在配置文件中实现键值字符串的变量替换。tasks.json及后面为调试创建的launch.json文件中变量的具体说明可参考variable reference.

tasks.json中部分关键字说明:

command: 要运行的程序,此处是g++。

args: args 数组包含将传递给 g++ 的命令行参数(必须按照编译器预期的顺序指定)。"{file}"表示当前打开的待编译的活动文件,对它进行编译,并在当前路径{fileDirname}生成与活动文件同名无后缀的可执行文件"{fileDirname}/{fileBasenameNoExtension}"。在本案例中活动文件指helloworld.cpp,所生成的可执行文件为helloworld。

label: 标签值是将在任务列表中看到的内容;可以随意命名它。

group中的isDefault : 值为true 表示支持通过快捷键ctrl+shift+B来执行该编译任务。如果值改为false,也可以从菜单中选择运行:Terminal >Run Build Task。

修改tasks.json

可以修改 tasks.json来满足一些特定需求。比如 将"{file}"替换"{workspaceFolder}/*.cpp"来构建多个 C++ 文件; 将"{fileDirname}/{fileBasenameNoExtension}"替换为硬编码文件名(如"helloworld.out")来修改输出文件名。

2.3 调试Debug
创建launch.json

launch.json 文件用于在 Visual Studio Code 中配置调试器。接下来将创建launch.json 文件。

从主菜单中,选择 Run > Add Configuration... ,选择C++ (GDB/LLDB) 。 之后将看到展示各种预定义调试配置的下拉列表,选择 g++ build and debug active file。将自动生成launch.json文件。

在编辑器中打开launch.json,具体内容类似如下:

cpp 复制代码
{
    // 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}/a.out",
            "args": [],
            "stopAtEntry": false,
            "cwd": "${fileDirname}",
            "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": "/usr/bin/gdb"
        }
    ]
}

这里千万要确保task.json中的"-o"参数与launch.json中的program参数相同

task.json中的"label"参数与launch.json中的preLaunchTask参数相同

下面自己就可以写一个hello world程序玩玩啦!

相关推荐
很㗊3 分钟前
Linux --- tar命令常见用法
linux·运维·服务器
飞凌嵌入式5 分钟前
嵌入式AI领域的主控选择
linux·arm开发·人工智能·嵌入式硬件
RisunJan6 分钟前
Linux命令-ld(将目标文件连接为可执行程序)
linux·运维·服务器
猫猫的小茶馆11 分钟前
【Linux 驱动开发】四. 平台总线驱动
linux·c语言·arm开发·驱动开发·嵌入式硬件·mcu·物联网
Yupureki12 分钟前
《算法竞赛从入门到国奖》算法基础:入门篇-分治
c语言·开发语言·数据结构·c++·算法·贪心算法
济61712 分钟前
linux--Cortex-A7架构-- Ubuntu20.04
linux·运维·架构
init_236118 分钟前
【HCIE-08】NAT64
linux·服务器·网络
深信达沙箱26 分钟前
如何选择源代码加密软件?应关注哪些核心技术要素
linux·服务器·网络·加密·软件·源代码·沙盒
alex180127 分钟前
ubuntu查看目录文件夹大小
linux·运维·ubuntu
代码游侠31 分钟前
嵌入式开发代码实践——串口通信(UART)开发
c语言·开发语言·笔记·单片机·嵌入式硬件·重构