clangdを使う際のメモ

最近ささっと C/C++書くとき, Emacsを使っているのだが, LSP serverとして clangdを使う際のメモ

Emacsの設定

Emacs開発版を使っているので, eglotをそのまま使う(C/C++ではデフォルトではサーバとして clangdが使われる)

(add-hook 'c-mode-hook #'eglot-ensure)
(add-hook 'c++-mode-hook #'eglot-ensure)

1ファイルの場合

特に対応が不要. よしなし補完なりエラーを表示してくれる

ビルドファイルがあるような本格的なプロジェクトの場合

各種フラグをセットしていたり, include pathを指定しておく必要があるので compile_commands.json を生成しておく必要がある. compile_commands.json はファイルの親ディレクトリかそのいずれかのディレクトリにある build/ サブディレクトリ以下にある必要がある. なのでビルドディレクトリ名には注意が必要となる.

CMakeの場合

CMAKE_EXPORT_COMPILE_COMMANDS というフラグがあるのでこれを onにしてビルドファイルを生成する

mkdir build/
cd build/
cmake -DCMAKE_EXPORT_COMPILE_COMMANDS=YES ..

Makefileの場合

compiledbbearMakefileから compile_commands.json を生成することができるので利用する. 一応ビルドせずファイルを生成する機能があるが, 1度ビルドした方が無難なようである.

# compiledbの場合
compiledb make

# bearの場合
bear -- make

これで補完やら定義元ジャンプやらが使えるようになる.