clangd 使用 (在vscode中)

https://cloud.tencent.com/developer/article/2329171
https://blog.csdn.net/qq_22660775/article/details/88690954

头文件报错#

如果直接使用clangd, 在一个多目录的项目中, 可能经常会头文件报错. 有两种解决方法

方法1 使用 Cmake 生成指引文件#

compile_commands.jsonclangd等工具用来提高代码跳转、补全功能的文件,在不存在compile_commands.json时,clangd会在分析自定义头文件时报错。对于c++项目,可以采用cmake 或make的方式来构建项目,而cmake和makefile均有对应的生成compile_commands.json文件的方法。

CMAKE_EXPORT_COMPILE_COMMANDS 选项

默认不开启,开启的两种方法:

  1. 在 CMakeLists.txt 中添加
set (CMAKE_EXPORT_COMPILE_COMMANDS ON)
  1. 在命令行中添加选项 -DCMAKE_EXPORT_COMPILE_COMMANDS=on
cmake -DCMAKE_EXPORT_COMPILE_COMMANDS=on 其余指令

方法2 设置 fallbackFlags#

fallbackFlags 可以设置 include 路径

clangd 中 fallback flag 和 Argument 的区别

他们是两个不同的配置选项,用于不同的目的:

  1. clangd.arguments:

    • 用于传递给 clangd 的命令行参数。
    • 这些参数可以配置 clangd 的行为,例如指定编译命令目录、启用或禁用特定功能等。
    • 例如:
      {
        "clangd.arguments": [
          "--compile-commands-dir=${workspaceFolder}/build"
        ]
      }
      
  2. clangd.fallbackFlags:

    • 当 clangd 无法找到 compile_commands.json 文件或没有为特定文件找到编译命令时,使用这些备用标志来解析代码。
    • 这些标志通常包括编译选项和包含路径,以确保 clangd 能够正确解析代码。
    • 例如:
      {
        "clangd.fallbackFlags": [
          "-std=c11",
          "-I${workspaceFolder}/include"
        ]
      }
      

总结:

  • clangd.arguments 用于配置 clangd 的整体行为。
  • clangd.fallbackFlags 用于在缺少编译命令时提供备用的编译选项和包含路径。
clangd arguments

clangd 的 arguments 中可以使用多种选项来配置其行为。以下是一些常用的选项:

选项 作用 示例
--compile-commands-dir=<path> 指定 compile_commands.json 文件所在的目录 --compile-commands-dir=${workspaceFolder}/build
--background-index 启用后台索引,以便在编辑代码时自动更新索引 --background-index
--clang-tidy 启用 clang-tidy 检查 --clang-tidy
--clang-tidy-checks=<checks> 指定要启用的 clang-tidy 检查 --clang-tidy-checks=*,-clang-analyzer-*
--completion-style=<style> 设置代码补全的样式,可以是 detailedbundled 或 plain --completion-style=detailed
--header-insertion=<policy> 设置头文件插入策略,可以是 iwyu(Include What You Use)或 never --header-insertion=iwyu
--header-insertion-decorators 启用或禁用头文件插入装饰器 --header-insertion-decorators
--limit-results=<number> 设置代码补全结果的最大数量 --limit-results=100
--log=<level> 设置日志级别,可以是 verboseinfoerror 或 off --log=info
--pch-storage=<mode> 设置预编译头文件的存储模式,可以是 memory 或 disk --pch-storage=memory
{
  "clangd.arguments": [
    "--compile-commands-dir=${workspaceFolder}/build", 
    // 指定 `compile_commands.json` 文件所在的目录,这个文件通常包含了编译相关的命令信息,通过设置该目录,clangd能够依据其找到对应的编译指令配置,有助于更准确地进行代码分析、索引等操作。
    
    "--background-index", 
    // 启用后台索引功能,意味着在你对代码进行编辑操作时,clangd会自动在后台更新索引,这样能及时获取最新的代码结构等信息,提升代码补全、查找引用等功能的准确性和及时性。

    "--clang-tidy",
     // 开启clang-tidy检查,clang-tidy是用于进行代码静态分析、检查代码规范和潜在问题的工具,启用它可以帮助发现代码中的一些风格问题、潜在错误等,提高代码质量。
     
    "--clang-tidy-checks=*,-clang-analyzer-*", 
    // 指定要启用的clang-tidy检查项目,此处的配置表示启用所有的检查(`*`表示全部),但排除以 `clang-analyzer-` 开头的那些检查,通过这样的设置可以灵活控制具体检查的范围,聚焦于实际关注的代码检查点。
    
    "--completion-style=detailed",
     // 设置代码补全的样式为 `detailed`,也就是补全时会提供更详细的信息,例如包含参数提示、函数返回值等更丰富的内容,方便开发者选择合适的补全项。
     
    "--header-insertion=iwyu", 
    // 设置头文件插入策略为 `iwyu`(Include What You Use),该策略会根据代码实际使用的情况智能地插入所需的头文件,避免不必要的头文件包含,优化代码结构和编译效率。

    "--limit-results=100", 
    // 限定代码补全结果的最大数量为100,防止补全结果过多导致难以选择,可在一定程度上提升补全操作的效率和体验。
    
    "--log=info", 
    // 设置日志级别为 `info`,意味着clangd会记录并输出一般的信息性日志,方便开发者在出现问题时查看相关的运行情况、排查错误,同时又不会像 `verbose` 级别那样输出过多冗余信息。
    
    "--pch-storage=memory", 
    // 设置预编译头文件的存储模式为 `memory`,即将预编译头文件存储在内存中,相较于存储在磁盘等其他方式,在某些场景下可以加快读取速度,提升编译过程中的性能表现。
  ]
}

这些选项可以根据你的需求进行调整,以优化 clangd 的行为和性能。

clangd 在 vscode 和 WSL 中使用#

使用远程设置为 WSL 环境 设置路径

vscode 设置了一些 settings.json, 其中含有很多路径, 比如 clangd.exe 路径
当连接到 WSL 中这些路径是无效的, 因为变到了 Linux 环境.
就要用到 远程设置

在这里修改的设置是专门为 WSL 使用的, 它会继承全局设置条目, 并覆盖掉重复的全局设置条目.

posted @   Ace233  阅读(113)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
点击右上角即可分享
微信分享提示
主题色彩