使用 clangd 取代 cpptools 作為 vscode 的 C/C++ LSP
起因
vscode 官方推薦的 C/C++ 插件是 cpptools,但是這個插件十分吃資源,並且容易崩潰。在網上看了一下,吐槽這個問題的並不是我一個人,遂決定換一個。經過一番比較,決定使用 clangd 來取代 cpptools 作為新的 C/C++ LSP。
我們直接在擴展里選擇 clangd 安裝並啟用,這里注意 clangd 與 cpptools 存在沖突,所以首先要把 cpptools 卸載。
問題
接下來的問題是,clangd 需要有一個 compile_commands.json
文件才能工作,這一點是比不上之前的 cpptools 安裝即用方便的。
解決方案
CMAKE 項目
對於 CMake 項目,比較簡單,只需要定義 CMAKE_EXPORT_COMPILE_COMMANDS
即可導出該文件,這也是最容易的操作方案:
cmake -DCMAKE_EXPORT_COMPILE_COMMANDS=1
Makefile 項目
對於 Makefile 項目,官方並沒有給出推薦的解決辦法,這里我找到了兩個解決辦法:
- 一個是使用
bear
。
一般Linux發行版都可以用自帶包管理器安裝,Ununtu下安裝命令為:
sudo apt install bear
使用 bear 生成 compile_commands.json 時,只需要在原本的編譯命令前添加 bear 前綴即可,如:
bear make -C src
- 另一種方式是使用python編寫的工具
compiledb
。
安裝命令:
sudo pip install compiledb
使用方式同樣是在原有make命令前添加 compiledb 前綴。特別的,只生成 compile_commands.json 不編譯項目,可以使用 -n
選項:
compiledb -n make