Post

如何将vscode打造成c++ ide

推荐安装llvm的工具链,这样就能使用clangd作为LSP,实际跳转非常准确,而且速度也很快。

在vscode里面只要hook一个插件就可以,插件的名字就是clangd

需要注意的是,如果你安装了多个clangd,那么可能要在vscode的clangd插件里指明clangd的路径

comile_commands.json的生成

首先比较现代的构建系统,基本支持在generation的过程中就能生成compile_commands.json,比如cmake,bazel,ninja等等

但是如果你使用的是makefile,那么就需要借助第三方工具了,比如bear

cmake如何生成compdb

1
cmake -DCMAKE_EXPORT_COMPILE_COMMANDS=on

ninja/gn如何生成compdb

其实我比较推荐的是用gn的时候就生成了, 以下ninja的步骤需要在build目录下已经生成了build.ninja

1
ninja -t compdb > compile_commands.json

如果是gn的话,会方便不少, gen的时候带上--add-export-compile-commands=<label_pattern>, 后面的形如//build/*,这样就能生成compile_commands.json了,另外可以直接在.gn里指定导出

1
2
3
4
export_compile_commands = [
  "//base/*",
  "//tools:doom_melon",
]

makefile导出

makefile稍微复杂点,需要借助bear

1
bear make

使用clang-format和clang-tidy

clang-format其实不用过多介绍,会让你写的代码非常符合预设的code style,而且还能自动格式化,非常方便

clang-tidy可以根据自己的需要,预设一些规则(当然他也依赖compdb), 这个的好处是他会根据mordern c++给你写的代码一些warning和修改建议

配合vscode和clangd插件,显得尤为好用。

如何在vscode里配置clangd的fallback option

Clangd: Fallback Flags中添加要的选项就可以了

设置完之后可能要重启一下vscode

关于find all reference

在配置完compdb之后很有用的一个功能就是find all reference,这玩意在找所有函数在哪里使用的时候很方便。

跳转虽然在compdb之后就能用了,但目前看在虚函数的部分处理的其实不是很好,我不知道这是啥问题

虚函数如果有默认实现的话,他会默认跳虚函数的实现,这时候其实你可能要看子类的实现,这个时候从基类->find all reference然后找到所有的实现切过去就好

关闭头文件自动添加

这个在clangd argument里可以自己+一下”–header-insertion=never”

这个看需求了,主要我有时候发现他会+一些很奇怪的头文件,而且是平台相关的,所以在跨平台的时候可能编译不过,就有点烦

设置compdb的路径

--compile-commands-dir=${workspaceFolder}/build

This post is licensed under CC BY 4.0 by the author.

Trending Tags