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の場合
compiledbや bear が Makefileから compile_commands.json
を生成することができるので利用する. 一応ビルドせずファイルを生成する機能があるが, 1度ビルドした方が無難なようである.
# compiledbの場合 compiledb make # bearの場合 bear -- make
これで補完やら定義元ジャンプやらが使えるようになる.