【个人纪录】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++ 的自动补全久矣……