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

【个人纪录】vscode配置clangd

本文仅用于个人纪录。

之前一直用 C/C++ Intelligense 作为代码补全插件,但总是莫名其妙不能用,搞的心烦。这次又崩了,搞了1个小时换clangd了。

1. 安装:

在vscode插件中搜索:clangd 并安装。
由于clangd与C/C++冲突,所以需要禁用C/C++插件。直接插件禁用,或者在 settings.json中配置:

"C_Cpp.intelliSenseEngine": "disabled",

配置后vscode会提示没有安装clangd工具,在vscode 下安装即可。如果再用命令行安装,则需要在vscode中指定这个的路径,不如用vscode的自动安装,不需要配置。

2. 配置头文件路径

安装完成后,会默认搜索默认路径下方的头文件,但当前工程中自定义的头文件、以及不在工程当中其他路径下的头文件是找不到的,需要额外配置。

每次修改 clangd 配置后,需要重启vscode或者重启 clanged 服务,否则配置无法生效。
重启服务方式:ctrl+P,搜索:Restart Clanged Language Server

1) 搜寻当前工程下的头文件

安装后发现许多头文件找不到,尤其是自定义的头文件和不在默认路径的头文件。为此,需要生成配置文件。

由于是用的ROS的workspace,gpt建议用bear生成。如下:

sudo apt install bear
cd ros_ws
bear -- catkin_make

首先安装bear,然后进入workspace的编译路径,用 bear – catkin_make 代替原来的 catkin_make。注意如果保存 – 找不到文件什么的,就不加–,直接用:bear catkin_make
此时会在worksapce下方生成一个: compile_commands.json 文件。

settings.json文件中对clangd进行配置:

"clangd.arguments": ["--compile-commands-dir=."],

设定路径为 .路径,寻找刚才生成的 compile_commands.json

这样就可以找到所有在当前workspace下的头文件。

2) 搜寻非默认路径、非当前工程下的头文件。

然而此时依然有一些“不在当前工程的头文件”找不到,需要额外再配置一个:.clangd文件。
./compile_commands.json 所在路径下方创建 .clangd文件,包括以下内容:

CompileFlags:Add: [-I/home/larry/voxel_ws/src/feat_voxel/voxel_plus/src/debug_config,-I/usr/include/eigen3,-I/opt/ros/noetic/include,-I/usr/include/pcl-1.12,-I/usr/include/pcl-1.10,-I/usr/local/include,-I/home/larry/codeGit/libtorch/include,-I/home/larry/codeGit/libtorch/include/torch/csrc/api/include]

就是配置Include的文件路径。

至此,所有头文件都不会报错了。

3. 其他配置

1)clang 格式化配置

在vscode通过 Ctrl+K, Ctrl+F 格式化时,有些配置不习惯。需要单独设置一个.clang-format 文件进行相应配置。

.clang-format 文件:

BasedOnStyle: LLVM  # 或其他风格(Google, Microsoft, WebKit...)
ColumnLimit: 200    # 调整换行长度
TabWidth: 4         # Tab 宽度设为 2
IndentWidth: 4		# if, while, for等下方indent的长度
UseTab: Never       # 使用空格代替 Tab(可选), Never/Always

2)vscode的自动补全

写代码用tab自动补全函数时,发现总是把括号自动生成了,很不习惯。需要仍然在 vscode 的 settings.json 中进行如下设置:

"clangd.completion.completeBrackets": false,  // 禁用自动补全括号

.clang-format 文件和 settings.json 文件配置,有什么不同?
前者只管 clang 的格式化,settings控制vscode的编辑器等,所以在两个不同的地方配置。

4. 总结

苦 C/C++ 的自动补全久矣……

http://www.lryc.cn/news/576949.html

相关文章:

  • 节点小宝:告别公网IP,重塑你的远程连接体验
  • Vue列表渲染与数据监测原理
  • word换行居中以后 前面的下划线不显示
  • Python中的序列化和反序列化
  • 2个任务同时提交到YARN后2个都卡住(CDH)
  • CNN, RNN, LSTM
  • 四大WordPress模板资源网站
  • 【QT】信号和槽(1) 使用 || 定义
  • 数据结构复习4
  • stm32之测量周期
  • GPT,GPT-2,GPT-3 论文精读笔记
  • 各种常用的串口助手工具分享
  • vue-30(理解 Nuxt.js 目录结构)
  • Java 大视界 -- 基于 Java 的大数据分布式存储在科研大数据归档与长期保存中的应用(328)
  • TCP/UDP协议深度解析(三):TCP流量控制的魔法—滑动窗口、拥塞控制与ACK的智慧
  • 【AGI】Qwen VLo:多模态AI的范式重构与AGI演进关键里程碑
  • 数据可视化 - 单子图
  • LeetCode 第80题 删除有序数组中的重复项Ⅱ
  • 【如何实现分布式压测中间件】
  • Conda 环境配置之 -- Mamba安装(causal-conv1d、mamba_ssm 最简单配置方法)-- 不需要重新配置CDUA
  • MCPA2APPT 智能化演示文稿系统:A2A、MCP、ADK 三大架构全流程自动化
  • stm32之普通定时器
  • 左神算法之Zigzag方式打印矩阵
  • 飞云翻倍布林(翻倍密码系统四线布林版)双安全系统+均价趋势指标+日线周线MACD,组合操盘技术图文分享
  • H3C-路由器DHCPV6V4配置标准
  • 群晖nas安装moodle跳坑记录
  • 【更新至2024年】1996-2024年各省农村居民人均消费支出数据(无缺失)
  • 第十二节:Vben Admin 最新 v5.0 (vben5) 快速入门 - 两种权限控制方式(附前后端代码)
  • 对象的finalization机制Test
  • 智慧水务:未来城市水务管理的创新实践与科技飞跃