C++でプログラムを書いていると、 どこにどんなclassを書いたか、忘れてしまいます。 1classに対し、1fileで対応させれば良いのですが、 どうしてもすばやく探したい時って、うっとうしく感じます。
ということで、クラスのメソッドとメンバの一覧を作ってくれる アプリケーションはないかと探してみたところ、 それに近そうなものがありました。ということで、ここにメモっておきます。
ディレクトリ内にあるソースについての検索を行う。
どこでどのサブルーチンが呼ばれているのか、など。
viなどで検索したあとに編集もできる。
xemacsからも使えるので、そのソフトを持ってくる。
cscope
mode for xemacs
cscope
mode for emacs
"C-c s"がprefixらしい。
キーバインド
C-c s s | キーワードで一覧を表示。 |
C-c s d | 関数定義の一覧を表示。 |
C-c s g | Find global definition (alternate binding). |
C-c s c | 呼び出される関数一覧。 |
C-c s C | 関数から呼び出している関数一覧。 |
C-c s t | 綴りを検索。 |
C-c s e | egrepでパターンを検索。 |
C-c s f | ファイルを探す。 |
C-c s i | #includeされているファイルを表示。 |
これ以降は、cscopeのデータベースメインテナンスを行う。
C-c s L | ファイルのリストからindexをつくる。 |
C-c s I | ファイルリストとindexをつくる。 |
C-c s E | cscope.files(index)を編集する。 |
C-c s W | cscopeのディレクトリがどこにあるか表示。 ("W" --> "where"). |
C-c s S | cscopeのディレクトリのbufferがどこにあるか表示。 ("S" --> "show"). |
C-c s T | Locate this buffer's cscope directory. (alternate binding: "T" --> "tell"). |
C-c s D | 「Dired」をバッファのディレクトリで起動。 |
以下は、cscopeのmanpageからの抜粋。
気になる環境変数
EDITOR | 選択したとき起動されるエディター[defalut: vi] |
INCLUDEDIRS | 「:」で区切られる#includeファイルを探すディレクトリ。 |
SOURCEDIRS | 「:」で区切られる、追加ファイルのディレクトリ。 |
VIEWER | プログラムを表示する際に使われるビューア。 |
VPATH | 「:」で区切られている、ソースディレクトリ。 設定されていれば、そのディレクトリのソースも探す。 設定されていない場合、カレントディレクトリのみがソースディレクトリとしてソースを探す。 |
気になる、FILES
cscope.files | 「-I, -p, -q, and -T」のオプションと、ソースファイルのリスト。 |
cscope.out | クロスリファレンスファイル。カレントディレクトリにつくれない場合、 ホームディレクトリに作成される。 |
cscope.in.out cscope.po.out |
逆indexを含むファイル。 「-f」オプションで、cscope.outの 名前を変更した場合、その名前に「.in」をつけた名前になる。 |
ドキュメントをソース中のコメントからつくってくれる。
htmlのみならず、latex、manなどの形式でもドキュメントをつくってくれる。
netscapeの検索と併用して、結構使える。
また、これを意識してプログラムをすれば、あとからみても分かりやす
いコードが書けそうだ。
コメントはしっかり書きましょう。
まず、
%doxygen -g
として、configファイルを作成する。おそらく「Doxyfile」なるファイルができて いる。 この中にコメントがかかれているので、それにしたがって設定していくのだが、 必要最低限の設定は、
PROJECT_NAME = 〜 PROJECT_NUMBER = 〜 OUTPUT_DIRECTORY = 〜 OUTPUT_LANGUAGE = Japanese EXTRACT_ALL = YES INPUT = 〜 FILE_PATTERNS = *.c *.h
などと適当に設定する。latex形式や、RTF形式のファイルが必要ない場合は、
GENERATE_LATEX = NO GENERATE_RTF = NO
などとすれば良い。configファイルを設定し終えたならば、
% doxygen
ちなみに、関数に関するコメントは、 関数の直前に、専用のフォーマットで書く必要がある。
/*! \mainpage My Personal Index Page * * \section intro Introduction * * This is the introduction. * * \section install Installation * * \subsection step1 Step 1: Opening the box * * etc... */
といった感じで書いていきます。 詳しくは下のぺーじを見てください。
普通にemacsについてくるらしい。 事前にやるべきこと。
ctagsだと、もっと強力にC++の解析をしてくれる(らしい..)
結構いい感じ。emacsにgtag.elをロードするようにすると、 M-.で希望の関数にジャンプするようになる。
CGIで関数などを関連付けてくれるみたい。 設定が面倒くさそうだったので使ってない。