読者です 読者をやめる 読者になる 読者になる

ccscope-1.0.0

最近,昼間の仕事で他部署の出してきた酷いCコードのデバッグ&スピードチューニングしなきゃならないことが多くてムスカ状態.目がー.目がー.

まぁ,ソレはソレとして,CやC++のプロジェクト読むとき皆GNU globalとかcscopeとかタグリファレンスツールを使うと思う.自分は一応cscope+emacs(xcscope.el)派なんだけど,変更があったときに一々タグインデックスとかクロスリファレンスファイルとかを再生成するのがめんどくさい.これはどんなツールでもまぁ一緒かなと思う.自分でMakefile弄っていいというかautotools化していいならmake cscopeとかでtop_srcdirに再生成させちゃうけど,政治的(=クソみたいな)理由によりそうもいかないケースがあったり,まぁ正直make cscopeとか叩くのもめんどくさい.ああ,なにもかもめんどくさい.でも,再生成しとかないと飛び先がズレててアレ?ってなるのもまたストレス.ストレス…ストレス…ストレス…

なのでccscopeというソース更新監視+cscopeインデックス自動再生成のための簡単なツールを作ってみた.もちろん「それ〜でできるよ!」とかサーベイはしてない.ツクリタカッタダケー.ムシロ何か良いものがあったら教えて欲しいアリスチャンでボクチャンなワタクシ.

READMEにも書いてあるけどビルド+インストールは,pficommon入れてから,

./configure
make 
sudo make install

で,使い方の例として,あるプロジェクトディレクトリ以下のc/h/cpp/hppファイルをcscopeインデックス作成対象にする場合,

cd path_to_project_dir
find . -name "*.[ch]" -or -name "*.[ch]pp" | sort > cscope.files
echo "cscope -b -k" > cscope.sh; chmod +x cscope.sh

とか前準備しといて,

ccscope

ccscopeはデーモンとしてバックグラウンド動作する.停止にはHUPシグナルを送る.ccscopeはcscope.files中にリストアップされたソースの更新をinotifyで監視し続ける.ソースのMD5が変更された場合,cscope.shを起動する.また,cscope.filesそのものの変更も同様に監視し,変更されたら監視対象ソースを自動再読み込み+cscope.sh起動をする.cscope.sh起動間隔は最短1秒となっており,この間隔以内に2ファイル以上変更があったとしてもそれらの検知による次回cscope.sh起動は1回にまとめられる.イロイロ手抜きされてて単純.

これで一応インデックスの状態を常時ソースに追従させることができるようになったので,(cscopeは元々ある程度のズレは補正しちゃうがそれでも)タグジャンプで別の行とかにスカることはなくなった.

cscopeのために作ったからccscopeとしてるけど,仕組み自体は別にcscopeのために使わなくても良かったね.例えばcscope.shにmakeって書いておくと自動継続監視ビルドみたいになってomakeじゃないビルドシステムのプロジェクトでもなんとなくomake -P的になってステキとか.