TAGSファイルには定義が含まれています
TAGSファイルには、関数やクラスが定義されている場所のリストが含まれています。これは通常、プロジェクトのルートに配置され、次のようになります。
^L
configure,3945
as_fn_success () { as_fn_return 0; }^?as_fn_success^A180,5465
as_fn_failure () { as_fn_return 1; }^?as_fn_failure^A181,5502
as_fn_ret_success () { return 0; }^?as_fn_ret_success^A182,5539
as_fn_ret_failure () { return 1; }^?as_fn_ret_failure^A183,5574
これにより、Emacsは定義を見つけることができます。基本的なナビゲーションはに組み込まれてfind-tagいetags-selectますが、複数の一致がある場合により優れたUIを提供します。
コード補完にはTAGSファイルを使用することもできます。たとえば、会社のetagsバックエンドはTAGSファイルを使用します。
TAGSファイルはさまざまなツールで構築できます
ctags(以前は 'universal ctags'または 'exuberant ctags'と呼ばれていました)はTAGSファイルを生成でき、幅広い言語をサポートしています。githubで積極的にメンテナンスされています。
Emacsにはetags、およびと呼ばれるTAGSファイルを生成する2つのプログラムが付属していますctags。Emacs ctagsはetags、ユニバーサルctagsと同じCLIインターフェイスを備えています。混乱を避けるために、多くのディストリビューションはこれらのプログラムの名前を変更しています(ctags.emacs24Debianなど)。
などTAGSファイルを生成するための言語固有のツールもありますjsctagsとはhasktags。
その他のファイル形式
ebrowseEmacsに同梱されているCプログラムです。C / C ++コードのインデックスを作成し、BROWSEファイルを生成します。ebrowse.elは、通常の検索定義と補完を提供します。BROWSEEmacsでファイルを直接開いて、コードベースで定義されたクラス/関数の概要を取得することもできます。
GNU GlobalにはGTAGS、GRTAGSとGPATHファイルで構成される独自のデータベース形式があります。これらのファイルは、gtagsC / C ++コードを解析するコマンドで生成できます。他の言語では、GNU Globalはユニバーサルctagsによって生成されたファイルを読み取ることができます。
GNU Globalは、「このシンボルはどこに言及されているのですか?」のような、より洗練された質問をするためのCLIインターフェースも提供します。Emacsパッケージgtags.elが同梱されていますが、ggtags.elもGNUグローバルデータベースへのアクセスに人気があります。
Cscopeは、精神的にはGNU Globalに似ています。C/ C ++を独自のデータベース形式に解析します。また、「この関数のすべての呼び出し元/呼び出し先を見つける」などの質問にも答えることができます。
グローバルとcscopeを比較するこのHNディスカッションも参照してください。
クライアント/サーバープロジェクト
rtagsはパーシスタントサーバーを使用してC / C ++を解析およびインデックス付けします。Clangパーサーを使用するため、C ++を非常にうまく処理します。サーバーを照会するためのEmacsパッケージが同梱されています。
google-gtagsは、大きなTAGSファイルがサーバーに保存されるプロジェクトでした。サーバーを照会すると、検索に関連するTAGSファイルのサブセットが提供されます。
セマンティック(CEDET)
セマンティックは組み込みのEmacsパッケージであり、C / C ++のパーサーが含まれているため、定義を見つけることもできます。また、TAGSファイル、csopeデータベース、その他のソースからデータをインポートすることもできます。CEDETには、このデータを使用するIDEスタイルの機能(クラス階層のUML図の生成など)も含まれています。
GTagsリンク先のプロジェクトはかなり死んでいます。誰かがについて話しているのならgtags、おそらくGNU Globalを参照しているでしょう。