CTAGS(1) | FreeBSD General Commands Manual | CTAGS(1) |
名称
ctags — tags ファイルを作成する書式
ctags | [ -BFTaduwvx][ -f tagsfile] file ... |
解説
ctags は、指定された C, Pascal, Fortran, yacc(1), lex(1), Lisp のソースから、 ex(1) コマンド用の tags ファイルを作成します。タグファイルは、指定されたオブジェクトが一群のファイル中のどの場所にあるかを示すものです。タグファイルの各行はオブジェクトの名前、定義されているファイル、オブジェクトの定義を見つけるための検索パターンを含み、各々は空白で区切られています。この tags ファイルを用いることにより、 ex(1) でこれらのオブジェクトが定義されている場所をすばやく見つけることができます。 ctags に与えられるオプションによりますが、オブジェクトは subroutine, typedef, define, struct, enum, union から構成されます。次のオプションを使用可能です:
- -B
-
後方検索パターン (
?...?
) を用います。 - -F
-
前方検索パターン (
/.../
) を用います (デフォルト)。 - -T
- typedefs, structs, unions, enums に関してタグを作成しません。
- -a
- 既存の tags ファイルに追加します。
- -d
-
引数を持たない
#define
に関してもタグを作成します。引数を持つ#define
は自動的にタグが作成されます。 - -f
- tagsfile で指定されたファイル名でタグファイルを生成します。デフォルトでは tags というファイル名でタグファイルを生成します。
- -u
- tags ファイル内の指定されたファイルに関する情報を更新します。すなわち、関係するファイルへのすべての参照が削除され、新しいタグ情報がファイルに追加されます。 (注意: このオプションはあまりスピードのでないような実装しかおこなわれていません。単に tags ファイルを再構築した方が早く終了するでしょう。)
- -v
-
vgrind(1) 形式のファイル一覧が標準出力に出力されます。この一覧はオブジェクト名、ファイル名、1 ページあたり 64 行とした場合のページ番号から構成されます。出力は辞書式の順番でソートされているので、この後に
sort(1) を通した方がよいでしょう。次のように使います。
ctags -v files | sort -f > index vgrind -x index
- -w
- 診断用メッセージを表示しないようにします。
- -x
- ctags はオブジェクト名、行番号、ファイル名、その行の内容からなる一覧を作成し、それを標準出力に出力します。これはオフラインでも読みやすいように印刷できる簡単な関数一覧として利用できます。
.c や .h で終わる名前のファイルは、C 言語のソースファイルとみなされ、 C の形式の関数・マクロ定義が検索されます。 .y で終わる名前のファイルは、 yacc(1) のソースファイルとみなされます。 .l で終わる名前のファイルは、最初の空白でない文字が‘ ;
’, ‘ (
’, ‘ [
’のいずれかであれば Lisp のファイルであるとみなされ、そうでなければ lex(1) のファイルとみなされます。その他のファイルは、まず Pascal か Fortran の定義が含まれるかどうかがチェックされ、含まれない場合には C 形式の定義が検索されます。
C 言語の場合、“ main
”は特別に扱われ、元のソースファイルのパス名部分と末尾の .c の部分を取り除いたファイル名に対し、その先頭に‘ M
’を付加したものをオブジェクト名とします。これにより、同じディレクトリに複数のプログラムがある場合でも ctags を実用的に使うことができます。
yacc(1) と lex(1) のファイルには特殊なタグがあります。“ yyparse
”は yacc(1) ファイルの第二セクションの始まりを示し、“ yylex
”は lex(1) ファイルの第二セクションの始まりを示します。
関連ファイル
- tags
- デフォルトで出力されるタグファイル
終了ステータス
ctags ユーティリティは、エラーが発生すると 1 を返し、それ以外では 0 を返します。同じ名前のオブジェクトが複数出てきてもエラーとはみなされません。互換性
-t オプションは何もしません。 typedefs, enums, structs, unions に関してデフォルトでタグを作成しなかった、以前のバージョンの ctags との互換性のためです。規格
ctags ユーティリティは、 IEEE Std 1003.1-2001 (“POSIX.1”) に適合しています。歴史
ctags ユーティリティは、 3.0BSD で登場しました。バグ
Fortran と Pascal 用の関数 (function)、サブルーチン (subroutine)、手続き (procedure) の認識にはとても単純な方法を用いています。ブロック構造が解釈できないので、異なるブロックに同じ名前の Pascal 手続きが存在するとうまく動作しません。 ctags ユーティリティは Pascal の型 (type) も理解しません。C か Pascal か Fortran かを判断する方法はとりあえず動いている、という程度のものです。
ctags ユーティリティは、きちんと整形された入力に頼っています。また、ソースファイルに文法的な間違いがあると簡単に混乱してしまいます。文法的に間違っていなくても混乱する場合があります。例えば、 #ifdef
を理解しないので (バグではなく仕様です)、 #ifdef
内に括弧のつりあっていないコードがあると混乱してしまいます。同様に、定義が複数行にわたっている場合、オブジェクトの先頭行ではなく最終行が検索パターンにマッチします。複数行にわたる typedef
に関しても同様です。
June 6, 1993 | FreeBSD |