欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 房产 > 建筑 > VSCode使用Clangd

VSCode使用Clangd

2024/10/25 21:23:32 来源:https://blog.csdn.net/magic_show_time/article/details/142484760  浏览:    关键词: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

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com