当前位置: 首页 > article >正文

VSCode使用Clangd

clangd基于Clang C++ 编译器,是LLVM项目中的一部分。clangd是一个语言服务器,可以通过插件与VSCode一起工作,协助进行代码补全等。

clangd的使用依赖于compile_commands.json编译数据库,该文件是一个包含项目中每个编译单元结构化数据的json格式文件。

当前Linux工程中CMAKE、Makefile等可以生成compile_commands.json:

  • 其中CMAKE直接添加set(CMAKE_EXPORT_COMPILE_COMMANDS ON)或命令行使用-DCMAKE_EXPORT_COMPILE_COMMANDS=on即可生成

  • Makefile工程要生成该文件略复杂,可以通过bearcompiledb完成

    • 通过bear生成compile_commands.json

      • 使用方法:直接在执行脚本或Makefile文件前加bear:bear sh -x build_vodlayer.shbear make
      • 优缺点:优点是支持执行脚本、可以使用更复杂的编译指令;缺点是必须要实际执行,在处理大型项目时,整体耗时较长;
    • 通过compiledb生成compile_commands.json

      • 使用方法

        • compiledb -nv make

        • compiledb -nv -d ./src/vod/ make

          其中-n表示不实际执行make,-v表示输出详细信息,-d指定Makefile路径,实测Makefile在当前路径下,直接使用命令1,Makefile在子路径下,使用-d指定Makefile路径,即命令2(注:支持Makefile嵌套执行)

      • 优缺点:优点是直接扫描Makefile文件,速度快;缺点是不支持执行脚本、不支持复杂的编译指令;

在生成compile_commands.json文件之后,直接点击源代码文件中任一变量或函数等,均可加载索引,加载时间与clangd配置、内存性能和源文件链接数量等相关。

实测clangd在centos7编译机中,加载索引速度为:

索引文件数量程序加载时间
217xxxx<5分钟
73xxxx10~15秒

VSCode中clangd部分配置说明:

"C_Cpp.intelliSenseEngine": "disabled",		//关闭C/C++的智能感知
    "clangd.onConfigChanged": "restart",	//配置改变时重启
    "clangd.arguments": [
        // compile_commands.json
        "--compile-commands-dir=${workspaceFolder}/build",	//指定输出json文件的路径
        "--all-scopes-completion",	//所有作用域补全
        "--background-index",	//后台索引,并持久化到磁盘中
        "--completion-style=bundled",	//补全/建议风格:打包,可选detailed
        "--enable-config",	//支持从yaml文件中读取配置
        "--function-arg-placeholders=true",	//自动补全函数参数占位符
        "--header-insertion=never",	//不自动插入头文件
        "--log=verbose",	//日志类型
        "--pch-storage=memory",		//pch优化的位置,支持memory和disk
        "--pretty",	//对输出的json文件格式化
        "--ranking-model=decision_forest",	//排序模型
        "-j=16",	//clangd任务执行的线程数
        "--clang-tidy",	//代码静态检查
        "--background-index-priority=normal",	//后台索引优先级
        "--parse-forwarding-functions"	
    ],
    "clangd.checkUpdates": true,	//clangd自动更新

由于上述过程会产生compile_commands.json和大量的clangd索引文件,建议在svn或git中配置忽略项:compile_commands.json.cache

  • 更新一下:在centos7上安装compiledb有些费力,推荐一个开源的compiledb-go,作者使用go语言重写了,方便部署。compiledb-go

http://www.kler.cn/news/318089.html

相关文章:

  • 《程序猿之设计模式实战 · 适配器模式》
  • 云计算和虚拟化技术 背诵
  • Django一分钟:DRF快速实现JWT认证与RBAC权限校验
  • 网络层协议——IP
  • 从入门到精通:QT 100个关键技术关键词
  • node.js 版本管理
  • Vue轮询请求接口
  • 语音合成(自然、非自然)
  • Maven中依赖配置
  • WRFDA保姆级安装教程
  • 聊一下cookie,session,token的区别
  • linux-下载、安装、更新和管理软件包
  • 【C++掌中宝】走进C++引用的世界:从基础到应用
  • leveldb前缀匹配查找Seek
  • SWC(Speedy Web Compiler)
  • java算法OJ(1)位运算
  • LabVIEW闪退
  • 企业职工薪资查询系统小程序的设计
  • JVM —— 类加载器的分类,双亲委派机制
  • 6 门新兴语言,小众亦强大
  • SpringCloud 基于 web 的只会养老平台
  • 【30天玩转python】高级面向对象编程
  • MYSQL解说
  • Flexus X实例全方位指南:智能迁移、跨云搬迁加速与虚机热变配能力的最佳实践
  • Linux——创建编写并编译一个C程序
  • 前端项目代码开发规范及工具配置
  • 【Linux】深度解析与实战应用:GCC/G++编译器入门指南
  • 无人机视角下的车辆数据集
  • 18.1 k8s服务组件之4大黄金指标讲解
  • 高等数学的后续课程