タイトルの通りの備忘録。Windowsだと情報がそれほど多くなくて、1日溶かしてしまった…
llvmのビルドについては良い記事が既に存在する。
Windows環境でLLVM、Clang、lld(Ver11.0.0)をビルドする手順 - 単子葉類プログラマーのメモ
簡単にまとめておくと
- VS2022とCMakeを事前にインストールしておく
git clone https://github.com/llvm/llvm-project.git
- llvm-project/buildディレクトリを作成
- llvm-project/buildをcmake-guiの書き出し先に指定してVSソリューションを作成
- Release, x64 設定でビルド
- このとき、utf-8じゃないって怒られが発生したので、適切に設定 → /utf-8 (ソースおよび実行文字セットを UTF-8 に設定する) | Microsoft Learn
という感じ。build/Release/binにパスを通して、llvmの準備は完了。
cclsもほぼ同様にビルドが行える。
- 公式の手順の通り、最新版を
git clone --depth=1 --recursive https://github.com/MaskRay/ccls
- ccls/buildディレクトリを作成
- CMakeLists.txtの頭の方に
SET(Clang_DIR "(前略)/llvm-project/build/lib/cmake/clang")
を追記
SET(LLVM_DIR "(前略)/llvm-project/build/lib/cmake/llvm") - CMakeでccls/buildを書き先にして、他の設定は特に弄らずConfigure→Generate
- VSソリューションが作成されるので、Release, x64 設定でビルド
- overrideされるはずのものがされていない、というエラーに対しては"override"のコメントアウトで対応したが問題なさそうだった。
ccls/build/Releaseにccls.exeがあるはずなので、このディレクトリにパスを通す。
これでcocからcclsを利用する準備が整った。cocの設定はWindows特有の要素があまりなく、dein等で導入したあと:CocConfigコマンドから設定を書けば問題ない。設定が保存されるファイルはnvimの設定フォルダ直下のcoc-settings.json。
わかりやすいまとめは NeoVimでC/C++を書くときはcoc.nvim + cclsが良さげ | endaaman.me とか。
VSのプロジェクトみたいな感じで、コンパイル対象のファイル一覧をcclsに知らせるために、compile_commands.jsonをプロジェクトにつき1つ作成する。おそらく一番簡単なのはClangの出力結果をまとめる方法。
Compilation database — Sarcasm notebook にある通り、
clang++ -MJ a.o.json -Wall -std=c++11 -o a.o -c a.cppのようにファイルごとにjsonを生成して、それを単純に連結したものを[]で括ってcompile_commands.jsonにする。この辺はclang++を叩くところも含めて適当にバッチなどで処理できる。
clang++ -MJ b.o.json -Wall -std=c++11 -o b.o -c b.cpp
適切なcompile_commands.jsonを有するフォルダ(例えば以下のような感じ)で補完が出来ていれば成功。ちゃんと出来ていればmain.cppがtest.h(プロトタイプ宣言)をincludeしてtest.cppに定義されている関数を呼ぶ、といった形になっていても補完やジャンプが利く。
│ main.cpp
│ test.cpp
│ test.h
│ compile_commands.json (main.cppとtest.cppを対象に上記手順で生成)
└─ccls-cache
│ (以下略)