リファレンスツールを探す。


C++でプログラムを書いていると、 どこにどんなclassを書いたか、忘れてしまいます。 1classに対し、1fileで対応させれば良いのですが、 どうしてもすばやく探したい時って、うっとうしく感じます。

ということで、クラスのメソッドとメンバの一覧を作ってくれる アプリケーションはないかと探してみたところ、 それに近そうなものがありました。ということで、ここにメモっておきます。



cscope

ディレクトリ内にあるソースについての検索を行う。 どこでどのサブルーチンが呼ばれているのか、など。 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 gFind global definition (alternate binding).
C-c s c呼び出される関数一覧。
C-c s C関数から呼び出している関数一覧。
C-c s t綴りを検索。
C-c s eegrepでパターンを検索。
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」をつけた名前になる。

参考になるページ

doxygen

ドキュメントをソース中のコメントからつくってくれる。 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
EXTRACT_ALLは、なにげに重要だったりする。

などと適当に設定する。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...
 */

といった感じで書いていきます。 詳しくは下のぺーじを見てください。

日本語の解説ページ

etags

普通にemacsについてくるらしい。 事前にやるべきこと。

etags *.[Ch]
そのあと、emacsで気になる関数の上でM-.をするだけ。 これで気になる関数のところに飛んでくれる。 すげー!

ctagsだと、もっと強力にC++の解析をしてくれる(らしい..)

ctags -e *.[Ch]

日本語の解説ページ

GLOBAL

結構いい感じ。emacsにgtag.elをロードするようにすると、 M-.で希望の関数にジャンプするようになる。


LXR

CGIで関数などを関連付けてくれるみたい。 設定が面倒くさそうだったので使ってない。