背景:
最近从Clion切换到了vscode来进行代码开发,发现vscode自带的c/c++插件除了能够使用debug功能,其余代码补全,跳转等功能都和基于clangd的clion有较大差距,经常出现匹配不上或者跳转不准确的问题,在这背景下自己折腾了两天切换到了基于clangd来配置(事实上vim中的youcompleteme也已经基于clangd来实现c/c++的代码的补全
配置方法:
首先在vscode的插件商店中搜索clangd,并安装。
安装完成后,打开一个已有的工程:
如以下是一个最简单的项目:
这里使用CMake来配置项目,事实上可能还存在其他比如bazel,scons,make等项目配置工具:
而clangd是基于compile_commands.json文件来完成对项目的解析,并支持代码补全和跳转。
这里记录一下三种生成方式:
1.在CMakeLists.txt文件中添加set(CMAKE_EXPORT_COMPILECOMMANDS ON),之后cd build && cmake .. ,可以发现在build目录下已经生成了compile_commands.json文件
2.如果是基于make方式来编译,那么可以先安装 pip install compiledb,之后在当前目录下运行(1) compiledb -n make -C build (2) compiledb make -C build 这两个命令中的其中一个来生成compile_commands.json文件,其中前者不会执行真正的make编译命令
3.如果是基于其他方式,可以使用https://github.com/rizsotto/Bear 项目中的方式来生成对应的compile_commands.json文件
通过以上方式生成完后compile_commands.json文件后,可以在vscode中对clangd的参数进行配置,可以使用clangd --help来获取一些有用的参数:下面给出我实际的配置:
其中第一个是指定配置文件所在目录,第二个是代码补全的时候完全显示函数的参数类型,而第三个则是避免clangd自动引入一些函数依赖的头文件。
在完成以上配置后,就可以愉快的使用clangd进行代码补全了跳转了!
可以看出在下图复杂的工程内部,函数的补全和跳转支持也是十分精准的!
(已知的issue,在和微软的c/c++一起工作时,会提示不正常,因此使用clangd时需要完全关闭c/c++的代码补全等一系列功能,只是将c/c++插件作为debug使用即可)