不灭的焱

革命尚未成功,同志仍须努力 下载Java21

作者:AlbertWen  添加时间:2026-06-06 11:20:03  修改时间:2026-06-17 09:46:45  分类:13.C/C++/Rust  编辑

下面是一套 VS Code + clangd 的完整 C/C++ 开发配置教程。重点记住一句话:clangd 负责智能补全/跳转/诊断/格式化,不负责真正编译和调试;编译靠 CMake/Make/Ninja,调试靠 GDB/LLDB/Windows Debugger。

1. 先搞清楚 VS Code + clangd 的分工

clangd 是 LLVM/Clang 项目里的 C/C++ 语言服务器,它通过 Language Server Protocol 给编辑器提供补全、诊断、跳转、悬停信息等功能;VS Code 里需要安装 clangd 扩展来连接这个语言服务器。(Clangd)

clangd 常见功能包括:代码补全、编译错误/警告提示、Go to Definition、Find References、Hover、Inlay Hints、include 管理、格式化、部分重构等。VS Code Marketplace 上的 clangd 扩展也明确列出了这些能力。(Visual Studio Marketplace)

你需要准备这几类工具:

工具 作用
VS Code 编辑器
clangd C/C++ 智能提示、跳转、诊断
clang / gcc / MSVC 真正编译代码
CMake / Make / Ninja 构建工程
GDB / LLDB / Windows Debugger 调试程序
clang-format 代码格式化
clang-tidy 静态检查;clangd 可以集成部分 clang-tidy 检查

clangd 最重要的输入是 编译参数。C/C++ 源文件不是自包含的,clangd 必须知道你的 -I、-D、-std=、目标平台、编译器路径等信息,否则就会出现“代码明明能编译,但 VS Code 里全是红线”的情况。官方文档也强调,clangd 需要知道项目如何构建,通常通过 compile_commands.json 提供这些编译命令。(Clangd)

2. 安装 clangd 和必要工具

Windows

推荐安装:

  1. VS Code

  2. LLVM 官方安装包,里面包含 clangd.exe、clang.exe、clang++.exe、clang-format.exe、clang-tidy.exe

  3. CMake

  4. Ninja

  5. 调试器:MSVC 路线用 Visual Studio Build Tools / Windows Debugger;MinGW 路线用 GDB

clangd 官方文档建议 Windows 用户从 LLVM releases 下载 LLVM installer;安装后确认 clangd 在 PATH 中。(Clangd)

检查命令:

clangd --version
clang++ --version
cmake --version
ninja --version

如果 clangd --version 找不到,把 LLVM 的 bin 目录加入环境变量,例如:

C:\Program Files\LLVM\bin

macOS

用 Homebrew 最省事:

brew install llvm cmake ninja

clangd 官方安装文档也给出了 Homebrew 安装方式。(Clangd)

Apple Silicon 常见路径:

/opt/homebrew/opt/llvm/bin/clangd
/opt/homebrew/opt/llvm/bin/clang++

Intel Mac 常见路径:

/usr/local/opt/llvm/bin/clangd
/usr/local/opt/llvm/bin/clang++

可以把 LLVM 加入 shell 配置:

echo 'export PATH="/opt/homebrew/opt/llvm/bin:$PATH"' >> ~/.zshrc
source ~/.zshrc

检查:

clangd --version
clang++ --version
cmake --version
ninja --version

Ubuntu / Debian

简单路线:

sudo apt update
sudo apt install clangd clang-format clang-tidy cmake ninja-build gdb build-essential

如果发行版自带 clangd 版本太旧,可以用 LLVM 官方 apt.llvm.org 源。apt.llvm.org 页面说明它提供 Debian/Ubuntu 的 LLVM/Clang/LLDB/LLD/libc++ 等包,并提供自动安装脚本;页面还列出了 clangd、clang-format、clang-tidy 等默认包。(LLVM Apt Repository)

官方脚本示例:

bash -c "$(wget -O - https://apt.llvm.org/llvm.sh)"

然后安装:

sudo apt install clangd clang-format clang-tidy

检查:

clangd --version
clang++ --version
cmake --version
ninja --version
gdb --version

3. 安装 VS Code 扩展

在 VS Code 扩展市场搜索并安装:

clangd

发布者是:

LLVM

VS Code 的 clangd 扩展需要本机存在 clangd language server;如果 PATH 里找不到,扩展会提示下载,在 x86-64 Linux、Windows、macOS 上可自动安装。(Visual Studio Marketplace)

建议再安装:

CMake Tools

CMake Tools 不是 clangd 必需品,但它可以在 VS Code 中配置、构建、调试 CMake 工程。VS Code 官方文档说明 CMake Tools 会把 VS Code 和 CMake 集成起来,方便配置、构建、调试 C++ 项目。(Visual Studio Code)

关于 Microsoft C/C++ 扩展:

  • 如果你只想用 clangd 做语言服务,最干净的方式是 只装 clangd,不装 Microsoft C/C++。clangd 官方 VS Code 安装说明也建议确保 Microsoft C/C++ 扩展没有安装。(Clangd)

  • 如果你需要 Microsoft C/C++ 扩展提供调试能力,可以保留它,但建议不要让它和 clangd 同时做 IntelliSense,否则会出现重复诊断、重复补全、跳转来源混乱等问题。

4. VS Code 基础配置:.vscode/settings.json

在项目根目录新建:

.vscode/settings.json

推荐基础配置:

{
  "clangd.arguments": [
    "--background-index",
    "--clang-tidy"
  ],

  "[c]": {
    "editor.defaultFormatter": "llvm-vs-code-extensions.vscode-clangd",
    "editor.formatOnSave": true
  },

  "[cpp]": {
    "editor.defaultFormatter": "llvm-vs-code-extensions.vscode-clangd",
    "editor.formatOnSave": true
  },

  "editor.inlayHints.enabled": "on"
}

clangd 的命令行参数可以通过 VS Code 的 clangd.arguments 数组传入;如果你的 clangd 不在 PATH 里,也可以用 clangd.path 指定 clangd 可执行文件路径。官方文档在 VS Code 部分说明了这两个设置。(Clangd)

例如 Windows:

{
  "clangd.path": "C:\\Program Files\\LLVM\\bin\\clangd.exe",
  "clangd.arguments": [
    "--background-index",
    "--clang-tidy"
  ]
}

例如 macOS Homebrew:

{
  "clangd.path": "/opt/homebrew/opt/llvm/bin/clangd",
  "clangd.arguments": [
    "--background-index",
    "--clang-tidy"
  ]
}

5. 最核心:生成 compile_commands.json

clangd 好不好用,80% 取决于 compile_commands.json。

这个文件记录每个源文件的真实编译命令,例如:

[
  {
    "directory": "/path/to/project/build",
    "command": "/usr/bin/clang++ -I../include -std=c++20 -g -c ../src/main.cpp",
    "file": "../src/main.cpp"
  }
]

CMake 官方文档说明,CMAKE_EXPORT_COMPILE_COMMANDS 会生成 compile_commands.json,其中包含项目所有 translation units 的精确编译器调用;该选项目前主要由 Makefile 和 Ninja generators 实现。(CMake)

6. 推荐工程结构:CMake + Ninja + clangd

新建项目:

hello-clangd/
├── CMakeLists.txt
├── include/
│   └── hello.hpp
├── src/
│   ├── hello.cpp
│   └── main.cpp
├── .vscode/
│   └── settings.json
├── .clangd
└── .clang-format

CMakeLists.txt:

cmake_minimum_required(VERSION 3.20)

project(hello_clangd LANGUAGES CXX)

set(CMAKE_CXX_STANDARD 20)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF)

add_executable(hello
    src/main.cpp
    src/hello.cpp
)

target_include_directories(hello PRIVATE
    ${CMAKE_CURRENT_SOURCE_DIR}/include
)

include/hello.hpp:

#pragma once

#include <string>

std::string make_message(const std::string& name);

src/hello.cpp:

#include "hello.hpp"

std::string make_message(const std::string& name) {
    return "Hello, " + name + "!";
}

src/main.cpp:

#include "hello.hpp"

#include <iostream>

int main() {
    std::cout << make_message("clangd") << '\n';
    return 0;
}

在项目根目录执行:

cmake -S . -B build -G Ninja -DCMAKE_EXPORT_COMPILE_COMMANDS=ON -DCMAKE_BUILD_TYPE=Debug
cmake --build build

如果你的 build 目录就在源码根目录下,clangd 通常能自动找到 build/compile_commands.json。clangd 官方文档说明,它会从正在编辑的文件向父目录搜索 compile_commands.json,也会搜索名为 build/ 的子目录;如果构建目录不在源码树的 $SRC 或 $SRC/build,可以复制或软链接 compile_commands.json 到源码根目录。(Clangd)

Linux/macOS 可以软链接:

ln -sf build/compile_commands.json compile_commands.json

Windows PowerShell 可以复制:

Copy-Item build\compile_commands.json .\compile_commands.json -Force

7. 如果不是 CMake 项目怎么办?

方案 A:Makefile 项目,用 Bear 生成

如果你的项目是 Makefile,可以用 Bear 记录一次完整构建,生成 compile_commands.json。clangd 官方文档给出的方式是:Bear 3.x 用 bear -- make,Bear 2.x 用 bear make。(Clangd)

make clean
bear -- make -j

生成后确认项目根目录有:

compile_commands.json

然后重启 clangd:

Ctrl+Shift+P → clangd: Restart language server

方案 B:特别简单的小项目,用 compile_flags.txt

如果所有 .cpp 文件的编译参数基本一样,可以在项目根目录新建:

compile_flags.txt

示例:

-std=c++20
-Iinclude
-Wall
-Wextra
-DDEBUG

clangd 官方文档说明,compile_flags.txt 适合所有文件共用同一套编译参数的简单项目;但如果存在 compile_commands.json,compile_flags.txt 会被忽略,而且 compile_flags.txt 场景下后台索引能力会受限。(Clangd)

8. .clangd:项目级 clangd 配置

在项目根目录新建:

.clangd

推荐模板:

CompileFlags:
  Add: [-Wall, -Wextra]
  Remove: [-Werror]

Diagnostics:
  ClangTidy:
    Add: [bugprone-*, performance-*, modernize-*]
    Remove: [modernize-use-trailing-return-type]
    FastCheckFilter: Strict
  UnusedIncludes: Strict
  MissingIncludes: Strict

Completion:
  AllScopes: Yes
  ArgumentLists: FullPlaceholders
  HeaderInsertion: IWYU
  CodePatterns: All

InlayHints:
  Enabled: true
  ParameterNames: true
  DeducedTypes: true
  Designators: true
  BlockEnd: false
  DefaultArguments: false
  TypeNameLimit: 24

.clangd 是 YAML 配置文件。clangd 支持项目配置 .clangd 和用户级 config.yaml;项目配置会从当前文件向父目录查找,适合提交到仓库共享给团队。(Clangd)

CompileFlags 可以增删编译参数,也可以指定 CompilationDatabase;Diagnostics.ClangTidy 可以启用或禁用 clang-tidy 检查;UnusedIncludes 可以开启未使用 include 诊断;Completion.HeaderInsertion: IWYU 代表补全接受时按 “include what you use” 插入头文件;InlayHints 可以控制参数名、推导类型等内联提示。(Clangd)

如果你的 compile_commands.json 不在默认位置,也可以用 .clangd 指定:

CompileFlags:
  CompilationDatabase: build

官方配置文档说明 CompilationDatabase 可以是目录路径、Ancestors 或 None。(Clangd)

9. .clang-format:格式化配置

在项目根目录新建:

.clang-format

推荐先用命令生成一份:

clang-format -style=llvm -dump-config > .clang-format

clang-format 官方文档说明,可以通过 .clang-format 或 _clang-format 文件配置格式化风格;clang-format -style=llvm -dump-config > .clang-format 是生成完整配置的常用方式。(Clang)

简单版 .clang-format:

BasedOnStyle: LLVM
IndentWidth: 4
ColumnLimit: 100
AccessModifierOffset: -4
AllowShortFunctionsOnASingleLine: Empty
PointerAlignment: Left
SortIncludes: CaseSensitive

VS Code 中格式化:

Shift + Alt + F

或者保存自动格式化:

{
  "[cpp]": {
    "editor.defaultFormatter": "llvm-vs-code-extensions.vscode-clangd",
    "editor.formatOnSave": true
  }
}

VS Code clangd 扩展说明,clangd 使用 clang-format 引擎,格式化风格由项目的 .clang-format 控制。(Visual Studio Marketplace)

10. .clang-tidy:静态检查配置

在项目根目录新建:

.clang-tidy

示例:

Checks: >
  -*,
  bugprone-*,
  performance-*,
  modernize-*,
  readability-*,
  clang-analyzer-*
WarningsAsErrors: ''
HeaderFilterRegex: '.*'
FormatStyle: file

clang-tidy 是基于 Clang 的 C++ linter,用于发现典型编程错误、风格问题、接口误用和可静态推导的问题。官方文档说明,clang-tidy 更容易在配置了 compile command database 的项目中工作。(Clang)

clangd 内置了 clang-tidy 的一部分能力,可以在编辑时给出 bug-prone、performance、style 等提示;clangd 也会尊重项目中的 .clang-tidy 文件,但不是所有 clang-tidy 检查都能在 clangd 中工作。(Clangd)

11. VS Code 中常用功能

补全

直接输入对象、函数、命名空间、成员:

std::vec

按 Tab 或 Enter 接受补全。clangd 会基于完整 C++ 解析器和类型信息给出补全。(Visual Studio Marketplace)

跳转

常用快捷键:

功能 快捷键
Go to Definition F12
Peek Definition Alt + F12
Go to Declaration 右键菜单
Find References Shift + F12
全局符号搜索 Ctrl + T 或 Ctrl + P 后输入 #
当前文件符号搜索 Ctrl + Shift + O 或 Ctrl + P 后输入 @

clangd 支持定义/声明跳转、引用查找、hover、code actions 等 VS Code 功能。(Clangd)

查看 clangd 日志

View → Output → 下拉选择 Clang Language Server

如果需要详细日志:

{
  "clangd.arguments": [
    "--background-index",
    "--clang-tidy",
    "--log=verbose"
  ]
}

clangd 官方排障文档建议在排查问题时查看编辑器暴露的 clangd stderr 日志,并可通过 --log=verbose 获取更详细信息。(Clangd)

12. 构建、运行、调试

推荐:CMake Tools 方式

如果项目是 CMake 工程,推荐用 CMake Tools:

  1. Ctrl+Shift+P

  2. 输入 CMake: Configure

  3. 选择编译器 Kit

  4. 输入 CMake: Build

  5. 输入 CMake: Debug

VS Code 官方 CMake Tools 文档说明,CMake Tools 可以选择 Presets 或 Kits/Variants,执行 CMake: Configure 生成构建文件,执行 CMake: Build 构建项目,执行 CMake: Debug 调试项目。(Visual Studio Code)

推荐配合 CMakePresets.json:

{
  "version": 6,
  "configurePresets": [
    {
      "name": "debug",
      "displayName": "Debug",
      "generator": "Ninja",
      "binaryDir": "${sourceDir}/build/debug",
      "cacheVariables": {
        "CMAKE_BUILD_TYPE": "Debug",
        "CMAKE_EXPORT_COMPILE_COMMANDS": "ON"
      }
    },
    {
      "name": "release",
      "displayName": "Release",
      "generator": "Ninja",
      "binaryDir": "${sourceDir}/build/release",
      "cacheVariables": {
        "CMAKE_BUILD_TYPE": "Release",
        "CMAKE_EXPORT_COMPILE_COMMANDS": "ON"
      }
    }
  ],
  "buildPresets": [
    {
      "name": "debug",
      "configurePreset": "debug"
    },
    {
      "name": "release",
      "configurePreset": "release"
    }
  ]
}

VS Code 官方文档也推荐使用 CMake Presets 管理 CMake 配置,因为它可以把项目配置写进可共享的 JSON 文件,并跨 IDE、跨系统使用。(Visual Studio Code)

纯 VS Code tasks.json 构建单文件

适合学习、刷题、小 demo。

.vscode/tasks.json:

{
  "version": "2.0.0",
  "tasks": [
    {
      "label": "build active cpp file",
      "type": "shell",
      "command": "clang++",
      "args": [
        "-std=c++20",
        "-g",
        "-Wall",
        "-Wextra",
        "${file}",
        "-o",
        "${fileDirname}/${fileBasenameNoExtension}"
      ],
      "group": {
        "kind": "build",
        "isDefault": true
      },
      "problemMatcher": []
    }
  ]
}

构建快捷键:

Ctrl + Shift + B

VS Code 的 Tasks 机制可以在 .vscode/tasks.json 中配置脚本或进程,并支持 ${file}、${workspaceFolder} 等变量。(Visual Studio Code)

Linux GDB 调试示例

需要安装 Microsoft C/C++ 扩展或其它调试扩展。clangd 本身不负责调试。

.vscode/launch.json:

{
  "version": "0.2.0",
  "configurations": [
    {
      "name": "Debug active file with GDB",
      "type": "cppdbg",
      "request": "launch",
      "program": "${fileDirname}/${fileBasenameNoExtension}",
      "args": [],
      "stopAtEntry": false,
      "cwd": "${fileDirname}",
      "environment": [],
      "externalConsole": false,
      "MIMode": "gdb",
      "miDebuggerPath": "/usr/bin/gdb",
      "preLaunchTask": "build active cpp file"
    }
  ]
}

VS Code C++ 调试文档说明,不同系统支持不同调试器:Linux 用 GDB,macOS 用 LLDB 或 GDB,Windows 可用 Visual Studio Windows Debugger 或 Cygwin/MinGW 的 GDB。(Visual Studio Code)

13. Windows 常见路线选择

路线 A:LLVM/MinGW + Ninja + GDB

适合想用类 Linux 工具链的人。

大致组合:

clang++
clangd
cmake
ninja
gdb

CMake 配置:

cmake -S . -B build -G Ninja -DCMAKE_EXPORT_COMPILE_COMMANDS=ON -DCMAKE_BUILD_TYPE=Debug
cmake --build build

调试用 cppdbg + gdb.exe。

路线 B:MSVC + Ninja + clangd

适合 Windows 原生开发。

在 “Developer PowerShell for VS” 或 “Developer Command Prompt for VS” 中打开 VS Code:

code .

然后:

cmake -S . -B build -G Ninja -DCMAKE_EXPORT_COMPILE_COMMANDS=ON -DCMAKE_BUILD_TYPE=Debug
cmake --build build

重点是让 CMake 生成的 compile_commands.json 记录真实的 MSVC/clang-cl 编译参数。clangd 会根据 compilation database 解析项目;如果编译器路径、SDK、标准库头文件路径不对,就会出现找不到头文件的问题。

14. 交叉编译 / 嵌入式项目配置

嵌入式项目经常有自定义编译器,例如:

arm-none-eabi-g++
riscv64-unknown-elf-g++

这时一定要让 compile_commands.json 里出现真实编译器和真实参数,例如:

{
  "directory": "/path/to/project/build",
  "command": "/opt/gcc-arm/bin/arm-none-eabi-g++ -mcpu=cortex-m4 -mthumb -I../include -DSTM32 -std=c++20 -c ../src/main.cpp",
  "file": "../src/main.cpp"
}

如果 clangd 找不到交叉编译器的系统头文件,可以给 clangd 增加 --query-driver 白名单:

{
  "clangd.arguments": [
    "--background-index",
    "--clang-tidy",
    "--query-driver=/opt/gcc-arm/bin/arm-none-eabi-*"
  ]
}

clangd 官方系统头文件文档说明,--query-driver 允许 clangd 执行白名单中的真实编译器来提取 include path 和目标信息;因为它会执行外部二进制,所以不是自动开启,而是需要用户显式 allowlist。(Clangd)

15. 常见问题排查

问题 1:#include <iostream> 找不到

原因通常是标准库头文件没安装,或者 clangd 没找到正确编译器/工具链。clangd 文档说明,它只自带与 clangd 版本相关的内建头文件,不自带 C++ STL;标准库、第三方库、POSIX 头文件等必须由系统或工具链提供。(Clangd)

排查:

clang++ -v -xc++ -c /dev/null

Windows 可用:

clang++ -v -xc++ -c nul

然后看 include search path。

问题 2:项目能编译,但 VS Code 满屏红线

优先检查:

compile_commands.json 是否存在?
compile_commands.json 是否在项目根目录或 build/ 下?
compile_commands.json 里的 file 路径是否正确?
compile_commands.json 里的 command 是否能单独运行?
clangd 日志里是否显示 Generic fallback command?

clangd 排障文档说明,如果 clangd 找不到项目内 include,通常意味着没有这个文件对应的 compile command;日志可以告诉你是否找到了 compile_commands.json,以及最终使用了什么编译命令。(Clangd)

问题 3:修改 CMake 后 clangd 没反应

重新生成构建系统:

cmake -S . -B build -G Ninja -DCMAKE_EXPORT_COMPILE_COMMANDS=ON

然后:

Ctrl+Shift+P → clangd: Restart language server

如果你新增了源文件,但 compile_commands.json 没更新,clangd 也不会知道新的编译参数。

问题 4:.h 文件提示不准

头文件本身通常不在 compile_commands.json 里,因为编译数据库主要记录 .c/.cc/.cpp 这类 translation units。解决方法:

  1. 确保包含该头文件的 .cpp 已经在 compile_commands.json 里;

  2. 打开相关 .cpp 后再看头文件;

  3. 对纯头文件库,可以用 compile_flags.txt 或 .clangd 补充 -I、-std=、-D 等参数。

问题 5:clangd 和 Microsoft C/C++ 扩展冲突

表现:

重复补全
重复红线
跳转结果不一致
格式化工具不一致

处理方式:

  • 语言服务只保留 clangd;

  • 如果必须保留 Microsoft C/C++ 用于调试,尽量关闭它的 IntelliSense/格式化;

  • C/C++ 语义功能、格式化、诊断都交给 clangd。

clangd 官方 VS Code 安装说明建议安装 clangd 扩展时确保 Microsoft C/C++ 扩展未安装;这是为了避免两个 C/C++ 语言服务同时接管同一批文件。(Clangd)

16. 一套推荐的最终配置

项目结构:

my_project/
├── CMakeLists.txt
├── CMakePresets.json
├── compile_commands.json        # 可选:软链接到 build/debug/compile_commands.json
├── .clangd
├── .clang-format
├── .clang-tidy
├── .vscode/
│   └── settings.json
├── include/
└── src/

.vscode/settings.json:

{
  "clangd.arguments": [
    "--background-index",
    "--clang-tidy"
  ],

  "[c]": {
    "editor.defaultFormatter": "llvm-vs-code-extensions.vscode-clangd",
    "editor.formatOnSave": true
  },

  "[cpp]": {
    "editor.defaultFormatter": "llvm-vs-code-extensions.vscode-clangd",
    "editor.formatOnSave": true
  },

  "editor.inlayHints.enabled": "on",
  "cmake.configureOnOpen": true
}

.clangd:

CompileFlags:
  Add: [-Wall, -Wextra]
  Remove: [-Werror]

Diagnostics:
  ClangTidy:
    Add: [bugprone-*, performance-*, modernize-*]
    Remove: [modernize-use-trailing-return-type]
    FastCheckFilter: Strict
  UnusedIncludes: Strict
  MissingIncludes: Strict

Completion:
  AllScopes: Yes
  ArgumentLists: FullPlaceholders
  HeaderInsertion: IWYU
  CodePatterns: All

InlayHints:
  Enabled: true
  ParameterNames: true
  DeducedTypes: true
  TypeNameLimit: 24

.clang-format:

BasedOnStyle: LLVM
IndentWidth: 4
ColumnLimit: 100
PointerAlignment: Left
SortIncludes: CaseSensitive

.clang-tidy:

Checks: >
  -*,
  bugprone-*,
  performance-*,
  modernize-*,
  readability-*,
  clang-analyzer-*
WarningsAsErrors: ''
HeaderFilterRegex: '.*'
FormatStyle: file

17. 使用流程总结

日常开发流程可以固定成这样:

# 第一次配置
cmake -S . -B build -G Ninja -DCMAKE_EXPORT_COMPILE_COMMANDS=ON -DCMAKE_BUILD_TYPE=Debug

# 构建
cmake --build build

# VS Code 中
# 1. 打开项目根目录
# 2. 等 clangd 索引完成
# 3. 写代码、跳转、补全、格式化
# 4. 用 CMake Tools 或 launch.json 调试

最重要的检查清单:

clangd --version 能运行
VS Code 安装的是 LLVM 的 clangd 扩展
项目有 compile_commands.json
compile_commands.json 里的命令真实可用
.vscode/settings.json 没让多个 C++ IntelliSense 引擎互相抢活
.clang-format 控制格式化
.clang-tidy / .clangd 控制静态检查

把这套跑通后,VS Code + clangd 的体验基本就接近轻量级 C++ IDE 了。