5
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

WIndowsでcclsの64bit版を手に入れる方法

Last updated at Posted at 2019-08-22

更新履歴

  • 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 オプションなどで抑えるほうがいいです
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 したときの例
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を手に入れることができました

実行バイナリを配布してくれていればこんなことしなくてよかったんですがね・・・(-_-;)

参考文献

5
3
4

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?