VSCode 配置 Clang 进行 C/C++ 开发

VSCode Linux C/C++ 配置 Clang 编译调试工具链

WSL 的安装以及安装 Linux 发行版

这一步可参考 Windows 的 WSL2 安装文档.
在发行版的选择上选择了 ArchLinux

ArchLinux 上工具的安装

更新系统软件:

sudo pacman -Syyu

安装 LLVM:

sudo pacman -S llvm clang clangd lld lldb libc++

VSCode 插件安装

  • Remote-WSL: 远程连接 WSL 进行 Linux C/C++ 开发

在 WSL 上安装:

  • Clangd
  • CodeLLDB
  • Clang-Format
  • CMake
  • CMake Tools

文件目录设置

在个人目录下新建一个 Cpp 专用的文件夹 Cpp,在 Cpp 文件夹下再新建 Cpp_SingleCpp_Multiple 。这里暂时只配置单文件编译调试(已经覆盖了学习的大部分场景)。
Cpp_Single 下创建 .vscode 文件夹,在.vscode 中新建 3 个文件:

  • lauch.json
  • tasks.json
  • setting.json

lauch.json

{
  "version": "0.2.0",
  "configurations": [
    {
      "name": "(lldb) Launch", // 配置名称,将会在启动配置的下拉菜单中显示
      "type": "lldb", // 配置类型,不同编程语言不同,该项由CodeLLDB插件提供
      "request": "launch", // 可以为launch(启动)或attach(附加)
      "program": "${fileDirname}/build/${fileBasenameNoExtension}", // 将要进行调试的程序的路径
      "args": [], // 程序调试时传递给程序的命令行参数,一般设为空
      "cwd": "${fileDirname}", // 调试程序时的工作目录,此为工作区文件夹;
      "internalConsoleOptions": "neverOpen", // 如果不设为neverOpen,调试时会跳到“调试控制台”
      "console": "integratedTerminal",
      "MIMode": "lldb", // 指定连接的调试器,可以为gdb或lldb,因为使用llvm工具链,所以使用lldb
      "miDebuggerPath": "/usr/sbin/lldb", // lldb调试器路径,通过在终端输入 which lldb 命令得到
      "setupCommands": [
        {
          "description": "Enable pretty-printing for lldb",
          "text": "-enable-pretty-printing",
          "ignoreFailures": false
        }
      ],
      "preLaunchTask": "Build C++" // 调试前执行的任务,一般为编译程序。与tasks.json的label相对应
    }
  ]
}

tasks.json

{
  "version": "2.0.0",
  "tasks": [
    {
      "label": "Build C++", // 任务名称,与launch.json的preLaunchTask相对应
      "type": "process", // 可以为process或shell
      "command": "clang++", // 要使用的编译器,C语言用clang
      "args": [
        "${file}",
        "-g", // 生成和调试有关的信息, 如果加上该参数,编译后不仅会生成.out可执行文件,还会生成后缀为.out.dSYM的文件夹,如果不加,调试器会忽略你设的断点
        "-o", // 指定输出文件名,os X和Linux下不加该参数则默认输出a.out,win下默认a.exe
        "${fileDirname}/build/${fileBasenameNoExtension}", // 指定编译生成结果(.out文件和.out.dSYM文件夹)
        "-Wall", // 开启额外警告
        "-std=c++20" // 使用的C++标准,这里是C++20,C语言改成"-std=c11"
      ], // 编译的命令
      "group": {
        "kind": "build",
        "isDefault": true
      },
      "options": {
        "cwd": "${fileDirname}"
      }
    }
  ]
}

其他设置

  • 格式化:Clang-Format 设置使用 Google 规范
  • clangd 的一些设置:
  "clangd.arguments": [
    "--background-index",
    "--compile-commands-dir=build",
    "-j=12",
    // "--folding-ranges",
    "--query-driver=/usr/bin/clang++",
    "--clang-tidy",
    "--all-scopes-completion",
    "--completion-style=detailed",
    "--function-arg-placeholders",
    "--header-insertion=iwyu",
    "--pch-storage=memory",
  ],

调试注意

在需要调试的文件的同级目录下建立一个 **build** 文件夹,否则调试会报错!