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:
  1. 进入生成 build.ninja 的那个目录(通常是 build/
  2. 执行
ninja -t compdb > compile_commands.json

 

end

 

posted @ 2025-12-14 14:04  年华似水゛  阅读(2)  评论(0)    收藏  举报