http://uguisu.skr.jp/Windows/gtags.html
GNU GLOBAL(gtags)は、ソースコードのタグジャンプです。簡単に複数のソース中から関数や、変数の定義元/参照元を見つけ、その箇所に移動することができます。
ctags、etags(cygwin や Linux に大抵標準で含まれています)と同じ働きをしますが、gtags はさらに強力な機能を持っています。大量の他人の書いたソースを読むプログラマには、必須だと思います。
GNU GLOBAL(gtags) の特徴
gtags は、次のような特徴を持っています。
- C、 C++、 Yacc、 Java、 PHP4 のソースコードに対応しています。
- 関数の呼び出し元を参照できます。
- 複数の候補が存在する場合は、一覧で表示してくれます。
- タグ情報より、HTMLを生成できます。
- コマンドラインや、vi、emacs などで利用可能です。
- GNU GLOBAL(gtags) : http://www.gnu.org/software/global/global.html
サイトの DownLoad のページより「global-x.x.x.tar.gz」をダウンロードしてください。
GNU GLOBAL(gtags) のインストール方法
通常のインストールと同様です。cygwin 上でも、最近のものを利用する場合は問題ありません。
- tar zxvf global-x.x.x.tar.gz(もしくは gzip -dc global-x.x.x.tar.gz | tar xv -)
- cd global-x.x.x
- ./configure (--prefix=任意の場所)
- make
- make install
なお、Cygwin の場合は、+Devel から、gcc, make を予めインストールしておいて下さい。
また、Cygwin の /usr/local/bin(例: C:/cygwin/usr/local/bin) にPATHを通しましょう。
「gtags.el」の移動
emacsを利用する場合は、任意のフォルダに global-x.x.x ディレクトリ内にある 「gtags.el」 をコピーしてください。
※ 「.emacs」に以下の一文を追加してください。(下記は「~/lisp」に「gtags.el」をコピーした場合です)
;; load-pathに追加 (setq load-path (cons "~/lisp" load-path))
Meadowを利用する場合は、C:/Meadow/site-lisp ディレクトリに global-x.x.x ディレクトリ内にある 「gtags.el」 をコピーしてください。
「gtags.el」の移動
vi を利用する場合は、「$HOME/.vim/plugin」フォルダに 「gtags.vim」 をコピーしてください。
cp /usr/local/share/gtags/gtags.vim $HOME/.vim/plugin
使用方法
プログラムソースのあるトップのディレクトリで、次のコマンドを入力します。
gtags -v
ファイル数によっては、かなりの時間を要します。
しばらくすると、「GPATH」「GRTAGS」「GSYMS」「GTAGS」のファイルが作成されます。
実際に利用したファイルサイズは、次のようなものです(ファイル数 152個)。
$ ls -lh total 4.0M -rw-r--r-- 1 hoge なし 32K May 1 02:07 GPATH -rw-r--r-- 1 hoge なし 2.6M May 1 02:07 GRTAGS -rw-r--r-- 1 hoge なし 736K May 1 02:07 GSYMS -rw-r--r-- 1 hoge なし 552K May 1 02:07 GTAGS drwxr-xr-x+ 12 hoge なし 0 May 1 01:59 global-4.8.5/
また、HTML化は次のコマンドで可能です。
htags -saF
ただし、非常に大きなファイルとなり、時間もかかります。
emacs/Meadow 上での使用方法
emacs/Meadow を起動して、次のコマンドで gtags モードに変更できます。
M-x gtags-mode
このとき、「.emacs」に以下を追加しておけば、便利になります。
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; GNU GLOBAL(gtags) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (autoload 'gtags-mode "gtags" "" t) (setq gtags-mode-hook '(lambda () (local-set-key "/M-t" 'gtags-find-tag) (local-set-key "/M-r" 'gtags-find-rtag) (local-set-key "/M-s" 'gtags-find-symbol) (local-set-key "/C-t" 'gtags-pop-stack) ))
- Ctrl+t gtagsでジャンプする一つ前の状態に戻る
- Alt+s 指定した変数、定義の定義元を探す
- Alt+r 指定した関数が参照されている部分を探す
- Alt+t 指定した関数が定義されている部分をさがす
使い方は、ジャンプしたい関数上で、上記のコマンドを入力します。
なお、Cygwin+Meadow環境では、正しくソースの位置を表示してくれない問題があります。
次のように表示され、正しいソースのある場所を誤ってしまいます。
Use C-u M-x make-directory RET RET to create directory and its parents
Cygwin パスを理解させたいのであれば、次のElisp を利用して下さい。
- cygwin-mount.el : http://www.emacswiki.org/elisp/cygwin-mount.el
ダウンロードした「cygwin-mount.el」は「C:/Meadow/site-lisp」に置きましょう。
また、「.emacs」に以下を追加しておきます。
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; cygwin-mount ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (when (and (featurep 'meadow) (locate-library "cygwin-mount")) (require 'cygwin-mount) (cygwin-mount-activate))
vim 上での使用方法
:Gtags main
で global -t main を実行し、結果をエラーウィンドウで開く。
'-r' で参照元一覧をエラーウィンドウに表示
:Gtags -r func1
main.c 内のオブジェクト一覧
:Gtags -f main.c <- locate objects in main.c
% や # も使える
:Gtags -f % <- locate objects in main.c
コマンドライン 上での使用方法
例えば、「grep」関数が、どのファイルで定義されているかは、次のように調べます。
$ global grep global-4.8.5/global/global.c # grep() は global.c で定義されている
'-t' オプションで ctags フォーマット表示
$ global -t help help global-4.8.5/global/global.c 103 help global-4.8.5/gozilla/gozilla.c 76 help global-4.8.5/gtags-parser/gctags.c 132 help global-4.8.5/gtags/gtags.c 110 help global-4.8.5/htags/htags.c 256
'-r' オプションで参照元表示。help() は 次のファイルで参照されている。
$ global -r help global-4.8.5/global/global.c global-4.8.5/gozilla/gozilla.c global-4.8.5/gtags-parser/gctags.c global-4.8.5/gtags/gtags.c global-4.8.5/htags/htags.c
'-x' オプションで詳細表示
$ global -x grep grep 755 global-4.8.5/global/global.c grep(pattern)
'-a' オプションで絶対パス表示
$ global -a grep /home/hoge/global-4.8.5/global/global.c
global下载
http://www.gnu.org/software/global/