vscode-clangd-阅读内核源码
参考
https://blog.csdn.net/callinglove/article/details/132539448
https://blog.csdn.net/ludaoyi88/article/details/135051470
环境
ubunut 2024.4
linux 内核源码
vscode
clangd 插件配置
clangd 安装
sudo apt install clangd
配置lsp clangd
直接复制到 .vscode/settings.json
{
/* ====== 必须先把微软 C/C++ IntelliSense 关掉,否则冲突 ====== */
"C_Cpp.intelliSenseEngine": "Disabled",
/* ====== clangd 可执行文件路径(系统 PATH 已含可省略) ====== */
// "clangd.path": "/usr/bin/clangd",
/* ====== 传给 clangd 进程的命令行参数(最关键) ====== */
"clangd.arguments": [
"--background-index", // 后台建立全局索引
//"--compile-commands-dir=build", // 指定 compile_commands.json 所在目录
"-j=2", // 并行线程数,约等于 CPU 核数
"--clang-tidy", // 启用 clang-tidy 实时检查
"--clang-tidy-checks=performance-*,bugprone-*",
"--all-scopes-completion", // 全局补全,会主动提示头文件
"--completion-style=detailed", // 补全列表带参数详情
"--header-insertion=iwyu", // 自动插入缺失头文件(iwyu 风格)
"--function-arg-placeholders=false",// 补全函数时不生成占位符[^11^]
"--pch-storage=disk", // 预编译头存磁盘,省内存
"--log=verbose" // 调试时打开,用不到可删
],
/* ====== 当找不到 compile_commands.json 时的后备编译旗标 ====== */
"clangd.fallbackFlags": [
"-I${workspaceFolder}/include",
"-std=gnu11"
],
/* ====== 插件自身行为 ====== */
"clangd.detectExtensionConflicts": true, // 检测冲突扩展
"clangd.serverCompletionRanking": true, // 对补全结果排序
"clangd.checkUpdates": false // 启动时是否检查 clangd 更新
}
clangd 还需要 compile_commands.json
可以采用以下方式
1. bear
sudo apt install bear
bear make
或者
bear + 编译命令
2. cmake
如果通过cmake 方式编译项目,3.5+版本中,在CMakeLists.txt工程文件中添加 set(CMAKE_EXPORT_COMPILE_COMMANDS ON),或者cmake添加 -DCMAKE_EXPORT_COMPILE_COMMANDS=ON 参数,make后可以在 build 目录下生成compile_commands.json文件
3. make
如果是基于make方式来编译,那么可以先安装pip install compiledb,之后在当前目录下运行
compiledb -n make -C build不会执行真正的 make 编译命令compiledb make -C build- 或者项目有自己的编译脚本,compiledb + 编译脚本的运行命令
4. ninja
ninja 自己就能吐
compile_commands.json,不需要额外工具,只要版本 ≥ 1.2:-
进入生成
build.ninja的那个目录(通常是build/) -
执行
ninja -t compdb > compile_commands.json
end

浙公网安备 33010602011771号