はじめに
こんにちは。最近vimを使い始めたvimmer見習いのsudoです。
正確にはneovimを使っています。
LSPクライアントはcoc-nvim、C/C++を書くときのLSPはclangdを使用しています。
LSPを導入することによってコードを書く際に補完やエラーの表示が可能になり、vimを便利エディターにすることができます。
発生した問題
C言語/C++を書くときにヘッダーファイルを別ディレクトリに入れた場合にヘッダーがfile not foundになる。
例えば、ディレクトリ構造、ファイルの中身が以下のようになっていた場合を想定します。
.
├── Makefile
├── includes
│ └── test.h
└── srcs
└── main.c
#include "test.h"
int main()
{
printf("hogehoge--");
}
#ifndef TEST_H
#define TEST_H
#include <printf.h>
#endif
このとき、何もしないと下の画像のようにtest.h
がfile not foundになってしまいます。
解決方法
compile_flags.txtというファイルを作成する
プロジェクトの一番上の階層(上のファイルツリーだとMakefileと同じ階層)にcompile_flags.txt
もしくはcompile_commands.json
というファイルを作成してコンパイルオプションを指定することによって解決しました。
-I./includes/
たぶんcompile_flags.txt
の方が書くのが楽そうです。
参考: https://uchan.hateblo.jp/entry/2018/12/29/104132
さいごに
毎回手動で記述するのも面倒なので、Makefileからcompile_flags.txt
を自動生成するコマンドを作りたいと思いました。いつか。
vimは楽しいですが、周りに使っている人が少ないので何か問題が発生したときに気軽に聞けないのがデメリットだと個人的に思っています。
追記
compiledbを使用するとMakefileからcompile_comamnds.jsonを自動生成してくれました。