更新履歴
- 2020-02-18 ビルドコマンドをclangに必要な分だけの設定に変更
@trairia さんのご指摘も反映
llvm 9.0.1タグでビルド確認済み
概要
- cclsをWindowsで使用するための記事が少なかった
- 自分が探した限り、Windowsでcclsを64bitビルドする日本語記事はなかった
- 備忘録として書き留めておきます
- 本当はVSCodeに連携していい感じに動くデモを見せたかったですが、まだ検証中なのでここまで
- 可能であればVSCode+ccls+tabnineを連携させて使ってみた内容をまとめてみます
そもそもcclsとは何なのか?
- C/C++/Objective-C用のLS(Language Server)
- 他にも
clangd
cquery
もある -
clangd
はどうやら不具合が多く快適じゃないらしい(詳しくは調べてません) -
cquery
は結構有名でいい感じに動くそうですが、2018年8月を最後に更新が止まっています -
ccls
はcqueryよりも最適化したLSらしいです 詳しくは作者が述べてます-
cquery
の快適さはそのままにコードを5000行削った -
cquery
よりもメモリやCPUリソースの消費が少ない- 軽く触った感じだと設定が悪いのか結構メモリもCPUも持っていかれました
- もう少し調査してから根拠を書きます
-
cquery
はC++14でできているが、ccls
はC++17でできている- つまりモダンな実装している
- etc...
-
用意するもの
-
Visual Stusio 2019 Community
- 使用バージョンはMicrosoft(R) C/C++ Optimizing Compiler Version 19.22.27905
-
CMake
- 使用バージョンは3.15
- chocolateyでも、Visual Studio付属のものでも構わないです
-
Ninja
- 使用バージョン 1.9.0
- chocolateyでインストール出来ます
- Visual Studioだとx64版がリンカーが不安定ということで64bitのLLVM/Clangのビルドをさせてくれない
手順
clang-clの64bit版と付随するcmake設定を手に入れる
WIndows版のLLVM/Clangはchocolateyでも取得できますが、LLVM/Clangのソースが付いていません
cclsのビルドにはLLVM/Clangのソースが必要なため取得します
ついでにclang-clの64bit版を作ります
- コマンドプロンプトを立ち上げて、64bit版のclコマンド(msvc++のコンパイラ)を実行できる状態にする
デフォルトであれば以下のコマンドを実行すれば環境変数諸々通ります
call "C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Auxiliary\Build\vcvarsall.bat" x86_x64
- 任意の場所でLLVMのソースを取得する
git clone https://github.com/llvm/llvm-project.git
- ビルドする
- CPUかメモリが貧弱だとコンパイラ内部のエラーが起こることがあるのでその場合は
ninjaビルド時に-j1
オプションなどで抑えるほうがいいです
- CPUかメモリが貧弱だとコンパイラ内部のエラーが起こることがあるのでその場合は
cd llvm-project
cmake -GNinja -BRelease llvm -DCMAKE_C_COMPILER=cl -DCMAKE_CXX_COMPILER=cl -DLLVM_ENABLE_PROJECTS="clang;polly" -DCMAKE_BUILD_TYPE=Release -DLLVM_TARGETS_TO_BUILD="Native"
ninja -C Release all
- ビルドが出来ているか確認
- うまく行けば以下の表示が出るはず
dumpbin /headers Release\bin\clang-cl.exe | findstr machine
8664 machine (x64)
cclsの64bit版を手に入れる
- cclsのソースを手に入れ、ビルドする
- 先程ビルドしたLLVM/Clangを
D:/tools/llvm-project
したときの例
- 先程ビルドしたLLVM/Clangを
git clone https://github.com/MaskRay/ccls.git
cd ccls
git submodule init
git submodule update
cmake -H. -BRelease -G Ninja -DCMAKE_BUILD_TYPE=Release -DCMAKE_CXX_COMPILER="D:/tools/llvm-project/Release/bin/clang-cl.exe" -DCMAKE_PREFIX_PATH="D:/tools/llvm-project/Release;D:/tools/llvm-project/Release/tools/clang;D:/tools/llvm-project/Release/tools/clang;
ninja -C Release all
- ビルドが出来ているか確認
- うまく行けば以下の表示が出るはず
dumpbin /headers Release\ccls.exe | findstr machine
8664 machine (x64)
前準備が色々面倒くさいですが、Windowsで扱えるcclsを手に入れることができました
実行バイナリを配布してくれていればこんなことしなくてよかったんですがね・・・(-_-;)
参考文献