clangd LSP
语言服务器:clangd(LLVM 项目的一部分)
支持的扩展名:.c、.h、.cpp、.cc、.cxx、.hpp、.hxx、.C、.H
安装
# macOS(装完整个 LLVM 工具链)
brew install llvm
# 然后加到 PATH:export PATH="/opt/homebrew/opt/llvm/bin:$PATH"
# Ubuntu/Debian
sudo apt install clangd
# Fedora
sudo dnf install clang-tools-extra
# Arch
sudo pacman -S clang
# Windows
winget install LLVM.LLVM不同发行版的包名不一样——有的叫 clangd,有的藏在 clang-tools-extra 或 clang 包里。
特有功能和局限
clangd 和其他语言服务器最大的区别在于:它高度依赖编译数据库。
C/C++ 没有统一的构建系统——CMake、Make、Bazel、Meson、手写 Makefile,各种各样。clangd 需要知道每个源文件是用什么编译选项编译的(包含路径、宏定义、标准版本等),这些信息存在 compile_commands.json 文件里。
没有 compile_commands.json,clangd 的分析能力大打折扣。头文件找不到、宏定义不对、模板推断出错,都是常见问题。
生成 compile_commands.json 的方法:
# CMake 项目
cmake -DCMAKE_EXPORT_COMPILE_COMMANDS=ON -B build
# Make 项目,用 Bear 工具
bear -- make
# Bazel 项目,用 bazel-compile-commands-extractor生成后把 compile_commands.json 放到项目根目录(或者用 .clangd 配置文件指定路径)。
项目配置
clangd 的配置通过项目根目录的 .clangd 文件:
CompileFlags:
Add: [-std=c++20, -Wall]
Remove: [-W*]
Diagnostics:
ClangTidy:
Add: [modernize-*, performance-*]这个配置可以覆盖或补充 compile_commands.json 里的编译选项。
典型场景
C/C++ 项目是最需要 LSP 辅助的语言之一。头文件层层嵌套、模板元编程、宏展开——这些光看源码文本几乎不可能准确理解。
一个场景:你改了一个头文件里的结构体定义,需要知道哪些 .cpp 文件会受影响。clangd 的引用查找能做到,文本搜索做不到(因为 #include 是传递性的)。
另一个:模板特化。一个模板函数有多个特化版本,你想知道某个调用实际会匹配到哪个特化。clangd 能给出答案。
注意事项
- 没有
compile_commands.json就别指望 clangd 能正常工作。这是大前提。 - 头文件搜索路径配置不对是最常见的问题来源。clangd 报
file not found时,先查编译数据库。 - clangd 对某些复杂的模板元编程分析不完整——这不能怪 clangd,C++ 的模板系统本来就是图灵完备的。
- 如果项目同时有 C 和 C++ 文件,注意
.h文件可能被当作 C 或 C++ 来分析,取决于编译数据库里的设置。
本章来自《Claude 插件官方指南》开源版 · 作者「递归客」
在线阅读完整书系:inferloop.dev
源码仓库:github.com/diguike/book-claude-plugins
本书资源
- 源码仓库 · github.com/diguike/book-claude-plugins
- 在线阅读 · inferloop.dev/claude-plugins
- 所有书目 · inferloop.dev
继续阅读 · 同作者其他书
- 《Transformer 工程实战》从注意力机制到生产部署
- 《自己动手写 AI Agent》从 Claude Code 开源架构到你的第一个编程助手
- 《AI 时代的 CLI 工具开发实战》用 TypeScript 构建现代 CLI 工具
- 《LLM Infra 工程实战》从入门到实践
- 《Hermes Agent 实战》构建会成长的个人 AI Agent
- 《OpenClaw 源码解析》现代 Agent 系统的架构设计与工程实践
- 《Agent Memory 工程实战》从 claude-mem 源码到企业级记忆平台
- 《AI Token 中转站实战》从 0 搭建企业级 LLM 网关
- 《LangChain.js Agent 开发权威指南》从 1.x 抽象到生产级 Agent
- 《百万级 AI Agent 平台架构》智能客服 SaaS 实战
- 《AI Agent 评测工程实战》从 0 用 TypeScript 构建你的评测平台
- 《Agent Harness 评测工程》用评测建设并守护一个 agent harness
- 《源码精读》每章一个开源仓库 · 从架构到品味
- 《Claude Code Skill 指南》