clang をインストールして,auto-complete を動かしてみた。

どもです。
起きたら,風邪でしんどくて,それでも頑張って掃除したり,ディクテイションしたり
したけど,やっぱりしんどいので,薬飲んで寝た。
2時間くらいして,起きたらだいぶ楽になりました。
もっと寝た方がいいんだろうけど,寝られないし,もぐっていても
暇だしということで,パソコンパチパチして,腹減ったので,頑張って,
例の鶏と野菜のの黒酢あんを作って喰らった。うまい。
どもです。


スクリーンショット

まずは結果からどうぞ。
おじさん,頑張って人生初の gif アニメを人まねで作ったお。



もっさりしてますねぇ。実にもっさりしてます。
キー入力が2,3文字分バッファにたまってドカドカと出るくらいです。

目標

とりあえず動作確認まで。

環境

手順

  • llvm と clang のソースの取得
  • llvm と clang をビルド
  • llvm と clang をインストール
  • auto-complete-clang.el をインストール
  • 試してみる

llvm と clang のソースの取得

基本,ここに書いてある通りでオッケー牧場。


http://clang.llvm.org/get_started.html


ポイントは,というか,ワタシがハマッタのは,
llvm と clang のリポジトリが同じだと勘違いして,
えらいことになってもーた。要するに2回ビルドする感じ。
リポジトリのURLが似ていますが,よく見ると違うので,
別々にコピペするがよろし。

llvm と clang をビルド

configure して,make。


./configure --help | less を眺めていて whitypig さんは考えた。
デバッグシンボル残しておいた方がコンパイル時間早くなるんじゃね?
ほいで,./configure --enable-debug-symbols して configure して,
ビルドしたら,
「おい兄ちゃん。--enable-debug-symbols すると,ビルド時間が10倍になるぞ。」
みたいなことを言われました。てへっ。
どうりでえらい時間がかかるはずだ。
なので,configure する際は,--enable-optimized をつけてやることをお勧めします。


あと,インストール先は,デフォルトでは,/usr/local 以下になります。
変更したい場合は,configure のオプションで変更するといいと思います。


上記URLの指示に従わずに,build ディレクトリを作成せずに make したら,
Debug+Assert というディレクトllvm のルートに作られて,
そのなかに bin, lib ができちゃいました。
なので,きちんと build ディレクトリを作成した方がいいと思います。はい。


Release でビルドしても,時間がかかると思うので,
その間にディクテイションとかシャドーイングをしましょう。

llvm と clang をインストール

make install でオッケー牧場だったはず。
デフォルト通り,/usr/local/bin に色々入りました。

auto-complete-clang.el をインストール

どうやら,auto-complete-clang.el は2種類あるようだったので,
両方試してみました。


https://github.com/mikeandmore/auto-complete-clang
↑については,補完候補の情報を,ミニバッファに出力してくれるのですが,
ほぼ間違いなく,出力された直後に, Wrote ... というバッファを保存したよ
Emacs からのメッセージで消えるので,わけわかめ
一方,
https://github.com/brianjcj/auto-complete-clang
については,補完情報を popup-tip で表示してくれるので安心。
たまに表示が崩れるけど余裕。


ロードパスが通ったところへ置いておく。
細かい設定とかは後回し。

試してみる

(ここでは,上記2つの内,後者を使用します。)
auto-complete-clang.el を Emacs から開いて,
M-x eval-buffer。
次に,適当に C++ のバッファを開く。
M-: して,(setq ac-sources '(ac-source-clang)) する。
さあ,パチパチ入力して,もっさり感を味合おうではないか!

まとめ

補完はめがっさすげー。
けどもっさり。ぶっちゃけそこまで補完を必要としていないという。えっ。
うそですやん。


mikeandmore さんの auto-complete-clang は,pch に対応しているみたいだから,
設定すれば早くなるかも。
でももひとつよくわかってない。
stl.h とか用意して,中で,algorithm から,vector から何からをインクルードして
プリコンパイルしておけば,stl に関してはいけるということなのかな?


あと,http://d.hatena.ne.jp/osyo-manga/20110228/1298869326
で紹介されている,libclang を使った方法ってどういうのだろうか?
その vimプラグインソースコード眺めてみたけど,わからず。
そして方法が分かったとしても,上記の auto-complete-clang.el で
使えるかどうかはわからん。


というわけで,次回があるなら,pre-compiled header を使った設定を
調べてみたいと思います。
あとは,補完関数をなんかのキーに割り当てておいて,
補完を欲しいときに,実行するとか。
ac-auto-start が,source 毎に設定できれば,それそれでありなのかも。
そうそう,ac-sources を いつものに戻しておきましょうね。えっ。

感謝

まいどおなじみになりますが,作者の人達に感謝感謝です。