Clangd工具
Table of Contents
1. 简介
clangd是一个基于LLVM的Clang编译器前端提供的代码补全服务工具,主要用于C 和C++的代码补全、诊断、重构等功能。它支持多种编辑器和IDE,并且通过 Language Server Protocol (LSP) 提供服务,使得它可以很容易地集成到不同 的开发环境中。实际使用中不需要了解clangd的细节, 只需要通过.clangd配置 文件指导clangd行为。
2. 配置文件
.clangd是Clangd的配置文件,用于在项目中自定义Clangd的行为。该文件通常 位于项目的根目录下,Clangd会在当前文件所在的父目录中搜索.clangd文件。
2.1. 层次结构
.clangd文件使用YAML格式,可以包含以下几个主要部分:
- CompileFlags: 编译标志部分;
- Diagnostics: 诊断设置部分;
- InlayHints: 代码提示设置部分;
- Completion: 代码补全设置部分;
- SemanticTokens: 语义标记设置部分;
实例:
# 最顶层包含几个主要部分:
# If/CompileFlags/Diagnostics/InlayHints/Completion/SemanticTokens
If: # 设置配置文件的使用条件
PathMatch: .*\.h # 所有头文件都使用
PathExclude: include/llvm-c/.* # 排除该路径下的所有文件
CompileFlags: # 编译标志部分
Add:
- "-Wall" # 启用所有警告
- "-Wextra" # 启用额外警告
- "-std=c++20" # 使用C++20标准
- "-Iinclude" # 包含头文件, 相对路径
- "-isystemF:/include" # 包含头文件, 绝对路径
Remove: ["-Werror"] # 移除将所有警告作为错误的选项
Compiler: clang++ # 指定编译器
Index:
Background: true # 在后台索引项目代码
BuildSystem: "CMake" # 指定构建系统类型
IndexFile: ".clangd-index" # 索引文件路径
ImplicitDynamic: true # 动态索引所有头文件
ResourceDir: "/path/to/resource" # 资源目录路径
Diagnostics: # 诊断设置部分
ClangTidy: # Clang-Tidy 配置
Add: ["cppcoreguidelines-*", "modernize-*", "performance-*"]
# 添加Clang-Tidy检查项, 其含义参见https://clang.llvm.org/extra/clang-tidy/
Remove: ["clang-analyzer-*"] # 移除Clang分析器检查项
ClangTidyChecks: true # 启用 Clang-Tidy 检查
Options: # Clang-Tidy 的选项设置
UseChecks: ["*"] # 使用所有检查项
HeaderFilterRegex: ".*" # 正则表达式,用于过滤头文件
WarningsAsErrors: "cppcoreguidelines-*" # 将特定警告视为错误
InlayHints: # 代码提示设置部分
Enabled: true # 启用代码提示
ParameterNames: true # 显示参数名称提示
DeducedTypes: true # 显示推断类型提示
Designators: true # 显示设计器提示
Completion: # 代码补全设置部分
AllScopes: true # 启用所有作用域的代码补全
Brackets: "[]" # 补全时使用的括号类型
SemanticTokens: # 语义标记设置部分
Enabled: true # 启用语义标记
DisabledKinds: ["Macro"] # 禁用宏语义标记
DisabledModifiers: ["Static"] # 禁用静态修饰符语义标记
3. compile_commands.json
compile_commands.json 是一个包含编译命令的JSON文件,用于描述项目中每个 源文件的编译方式。它的主要作用是帮助Clangd和其他工具了解项目的编译设置, 从而提供更准确的代码补全、跳转和诊断功能。具体作用如下:
3.1. CMake生成compile_commands.json
CMake下有两种方式可以生成compile_commands.json。
方案一: CMakeLists.txt设置
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
方案二: 命令行参数设置
mkdir build && cd build cmake -DCMAKE_EXPORT_COMPILE_COMMANDS=ON ..
3.2. Makefile生成 compile_commands.json
Makefile本身不能直接生成 compile_commands.json文件。不过,可以使用一些 工具来生成这个文件,例如Bear和CompileDB。
3.2.1. Bear
Bear是一个生成JSON编译数据库的工具,适合用于Makefile项目。使用方法如下:
安装Bear
sudo apt install bear
运行Makefile并生成 compile_commands.json
# 有的版本需要使用 bear -- make bear make
3.2.2. CompileDB
CompileDB是另一个生成compile_commands.json的工具,适用于GNU Make项目。 使用方法如下:
安装CompileDB
pip install compiledb
运行Makefile并生成 compile_commands.json
compiledb make