どうもです。2016年新卒としてBPSに入社しましたtjmです。
普段の業務ではAndroidのアプリ開発で、JavaとC++に触っています。
この記事は BPS Advent Calendar 2016 の 14日目1の記事です。
Vimのpath、正しく指定しているとベンリですよね。僕はgfが好きです。
そんなわけ2でプロジェクトで使用しているインクルードディレクトリをVimで正しくpathとして指定するために調べものしてみました。
たぶんできる手法
- cmake-server を使う
- Python でcmake-serverと通信して情報を取得する
- Vimに情報を反映する
- Success!!!
※2,3,4はこの記事ではやってません。何もSuccessしてません。どうしよう状態なので続きができ次第別記事の形で投稿すると思います。
CMakeを知らない方向けにざっくり一言で説明すると、CMakeは「ビルドツール向けジェネレータ」です。CMakeLists.txtにルールを書いて、Visual StudioだったりGNU Make向けのファイル群を吐き出したりできます。
成果物
まだない(cmake-serverとの通信方法がわかりました)
以下作業記録とcmake-serverについて説明。
cmake-server
幸い3にも僕が関わっているプロジェクトではCMakeが使用されていました。
CMakeには最近 cmake-server なる機能が増えたようなので使ってみます4。
cmake-server を使用するにはCMakeのバージョンが3.7以上である必要があります。
お手元のCMakeのバージョンが3.7に満たない場合は https://cmake.org/download/ から3.7以上のものをダウンロードしてください。
以下のコマンドでcmake-serverがお試し使用できます。
cmake -E server --debug --experimantal
experimental... gradleが思い出されるやつだこれ
上記のコマンドで起動すると標準入出力を用いてcmake-serverとプロトコルに則った通信ができます。
標準出力にはすでに何か出力されていると思います。
[== "CMake Server" ==[
{"supportedProtocolVersions":[{"isExperimental":true,"major":1,"minor":0}],"type":"hello"}
]== "CMake Server" ==]
こんな感じですよね。
プロトコルに関して詳しくは OperationとProtocol API を見ていただければいいと思います。が、注意点として、
[== "CMake Server" ==[
{
... some JSON message ...
}
]== "CMake Server" ==]
[== "CMake Server" ==[
と]== "CMake Server" ==]
はcmake-serverからのレスポンスだけじゃなく、こちらから送るときも必要です。こちらから送るときも必要です5。
handshake
-> configure
-> compute
の手続きをするとプロジェクトの情報が取得できる codemodel
が使用できるようになります。
llvmを対象にする例: /home/tjm/srcにllvmのソースコードがあるとしたら
[== "CMake Server" ==[
{"cookie":"experimentalhayavai","type":"handshake","protocolVersion":{"major":1},"sourceDirectory":"/home/tjm/src/llvm","buildDirectory":"/home/tjm/src/llvm-build","generator":"Ninja"}
]== "CMake Server" ==]
[== "CMake Server" ==[
{"cookie":"experimentalhayavai","type":"configure","cacheArguments":["-DCMAKE_INSTALL_PREFIX=/home/tjm/Tools/llvm"]}
]== "CMake Server" ==]
[== "CMake Server" ==[
{"cookie":"experimentalhayavai","type":"compute"}
]== "CMake Server" ==]
[== "CMake Server" ==[
{"cookie":"experimentalhayavai","type":"codemodel"}
]== "CMake Server" ==]
これをPythonから入出力すれば良い、と。
次
Pythonで入出力(まだ書いてません)
"type:"codemodel"
で帰ってきたjsonをterminalでコピーして保存したら1.4Mになりました。
頑張ってpipe使おうと思います。
参考
CMake: https://cmake.org/
cmake-server: https://cmake.org/cmake/help/v3.7/manual/cmake-server.7.html