41
34

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 5 years have passed since last update.

clangd導入メモ

Last updated at Posted at 2017-12-25

clangdとは

clangのLanguage Server Protocol 実装。

LSPはMicrosoftが提唱しているIDE支援のための統一プロトコル。
Language "Server"とあるとおり、言語支援のためのサーバーが常駐する。この手の機構を個別に備えた言語として、TypeScriptのtsserverとか、C#のOmniSharpなどが挙げられるけど、それの汎用版。

clangdはLLVMのフロントであるclangをベースとしたサーバーで、LLVMプロジェクトが公式に開発している。
コンパイラなので、コンパイルエラーの検出はもちろん、コード補完やフォーマット、定義ジャンプと参照元ジャンプ等には対応している。
なので、clang-formatやRTagsといったclang系ツールも、LSPクライアントを導入してしまえば、これらの個別設定をしなくてよい。

clangdのインストール

macだと、brew install llvm とかするとclangdもインストールされるらしい。未確認。
僕は未だにmacports使ってたせいか、知らんうちに手元に入ってた。port install llvm-5.0 で勝手にインストールされるらしい。

LLVMのソースからビルドする場合は、 https://clang.llvm.org/get_started.html あたりを読むべし。clangdはclang-tools-extraに入ってるので、svn co するのを忘れずに。

インストールしたら、 --version で確認できるよ(以下はソースからビルドした版)。

$ clangd --version
> LLVM (http://llvm.org/):
>   LLVM version 6.0.0svn
>   Optimized build with assertions.
>   Default target: x86_64-apple-darwin16.7.0
>   Host CPU: broadwell

エディタ側

vim

vimの場合は汎用LSPクライントをインストールし、こいつにclangdのパスを教えてやる流れ。

LSPクライアントはいくつかあるんだけど、僕は https://github.com/prabirshrestha/vim-lsp を利用している。
他と使い比べたわけでもないんだけど、作者がMSの人だしLSP慣れてんのかなーと思ってこれ使ってる。

この人のpluginは vim / nvimの非同期周りを吸収するasync.vimってのが出てくるので、セットでインストールしておく。

Plug 'prabirshrestha/async.vim'
Plug 'prabirshrestha/vim-lsp'
let g:lsp_log_verbose = 1
let g:lsp_log_file = expand('~/vim-lsp.log')
call lsp#register_server({
    \ 'name': 'clangd',
    \ 'cmd': {server_info->['clangd']},
    \ 'whitelist': ['c', 'cpp', 'objc', 'objcpp'],
    \ })

" オムニ補完設定
autocmd FileType typescript setlocal omnifunc=lsp#complete

VSC

LLVMが拡張作ってるので、これを入れるがよろし。

vscode-clangd

また、user/projectの設定で、clangdの在処を直接指定することも可能。

{
  "clangd.path": "/absolute/path/to/clangd"
}

compile_commands.json

clangdにコンパイラオプションとかを教える場合、compile_commands.json を作って、カレントディクレトリなりに置くとclangdがよしなに探索してくれる。
または clangd起動時に -compile-commands-dir オプションで、jsonファイルの在処を教える、でもよい。

compile_commands.json を作る方法はいくつかある。

例えばcmakeの場合は下記のように、 CMAKE_EXPORT_COMPILE_COMMANDS を有効にしてcmakeを実行すると、出力される。

cmake -DCMAKE_EXPORT_COMPILE_COMMANDS=1 .

シンプルにMakefileのみのプロジェクトの場合、Bear を使う。

bear make

Bazelだと、

とか

があるようだが、きちんと確認してない。

41
34
0

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
41
34

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?