cgwin提供のパッケージにはgtagsは含まれていなかったため、自前でビルドすることにしました。
目次:
- gatgsの特徴
- gtagsのインストール手順
- emacsの設定
- gtagsの使い方
gtagsの特徴:
- 良い点!
- 関数の呼び出し元を一覧表示しジャンプできる(gtags-find-rtag)
- 関数だけでなく、ローカル変数を含む任意のシンボルをタグジャンプできる(gtags-find-symbol)
- 正規表現で一覧絞り込み可能(gtags-find-pattern)
- 開いているファイルで絞り込み可能(gtags-parsefiile)
- 特定文字列をファイル名に含むファイルを一覧できる(gtags-find-file)
- ジャンプした場所をスタックで記憶しており、何個でも遡れることができる(gtags-pop-stack)
- コールスタックを調査している場合、この機能が非常に役に立ちます。
- 悪い点…orz
- ctags(find-tag)ではclass宣言にジャンプできましたが、gtags-find-tagではタグジャンプできませんでした(typedef, struct, enum定義はOKなのですが)…。コンストラクタ・デストラクタしかタグづけされておらず、class宣言の場所はgtags-find-rtagで探し出さないといけない状態です。
- できる!というかた是非手順をご教示くださいm(_ _)m
gtagsインストール手順:
- ローカルで適当なディレクトリを作って、GNU GLOBAL source code tagging systemからソースコードのglobal-6.5.tar.gzアーカイブをダウンロードします。
- (参考)DOS and Windows portsにport版のglo65s.zipもありますが、cygwin環境でコンパイル&利用する上ではport版を利用する必要はないようです。port版をビルドする際には、以下の手順でconfigureにchmodで実行可能属性を付与する必要があります。
-
zipを展開しただけだと実行権限がついておらず、configureスクリプトを実行しようとすると以下のようなエラーになります。
% ./configure ./configure: Permission denied.
- zipアーカイブを展開し、生成されたglobal-6.5ディレクトリに移動
- 全てのファイルがglobal-6.5ディレクトリ以下に展開されます。
- ./configureを実行
- 足りないライブラリがあればcygwinパッケージでインストールする。自分の環境では以下のライブラリの追加インストールが必要でした。
- libncurses-devel
- このパッケージがない状態で./configureを実行すると以下のようなエラーになります。
- makeと、make installを実行
- デフォルトでは/usr/local以下にファイルがコピーされます。
- 念のため確認
-
/usr/local/binにPATHが通っていないと以下のようなエラーになります。
% which gtags gtags: Command not found.
% chmod +x configure
% tar xzf global-6.5.tar.gz % cd global-6.5
% ./configure
% ./configure (...snip...) configure: checking "location of ncurses.h file"... configure: error: curses library is required but not found. If you are not going to use gtags-cscope, please try ./configure --disable-gtagscscope
% make % make install
% rehash % which gtags /usr/local/bin/gtags % gtags --version gtags (GNU GLOBAL) 6.5 Copyright (c) 2015 Tama Communications Corporation License GPLv3+: GNU GPL version 3 or later <http://www.gnu.org/licenses/gpl.html> This is free software; you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law.
emacsの設定:
- gtags.elをload-pathに移動する
- load-pathに/usr/local/share/gtagsを追加する方法でも問題はありません。個人的な好みでsymbolic linkを利用しています。
- .emacsの編集
- キーバインドのカスタマイズ
- M-t, M-r, M-s, C-tにバインドする例が紹介されていましたが、個人的に利用するものとバッティングしていため、C-j C-???にマッピングしています。
- C-tでは不要でしたが、C-j C-jをgtags-pop-stackにバインドするには、gtags-select-mode-hookでの定義も必要でした。
% cd /usr/share/emacs/site-lisp % ln -s /usr/local/share/gtags/gtags.el .
;;; gtags ;;; (require 'gtags) (add-hook 'java-mode-hook (lambda () (gtags-mode 1))) (add-hook 'c-mode-hook (lambda () (gtags-mode 1))) (add-hook 'c++-mode-hook (lambda () (gtags-mode 1)))
(setq gtags-mode-hook '(lambda () (local-set-key "\C-j\C-t" 'gtags-find-tag) (local-set-key "\C-j\C-h" 'gtags-find-tag-from-here) (local-set-key "\C-j\C-p" 'gtags-find-pattern) (local-set-key "\C-j\C-r" 'gtags-find-rtag) (local-set-key "\C-j\C-s" 'gtags-find-symbol) (local-set-key "\C-j\C-f" 'gtags-find-file) (local-set-key "\C-j\C-l" 'gtags-parse-file) (local-set-key "\C-j\C-j" 'gtags-pop-stack) )) (setq gtags-select-mode-hook '(lambda () (local-set-key "\C-j\C-j" 'gtags-pop-stack) (local-set-key [127] 'gtags-pop-stack) ; [DEL] ))
gtagsの使い方:
- ソース群が格納されたディレクトリのルートへ移動してGTAGSファイルを生成する
- emacsを起動しgtags-find-tagで関数名を指定し[RET]
- 初回はGTAGSファイルの場所を聞かれます。gtagsを実行したディレクトリに生成されているファイルを選択します。
% cd src % gtags -v
備考:
cygwin以外の環境(mac, linux)でも同様の手順でセットアップができました。cygwin-mountを入れないと動かないかも、という記述を見かけましたが私の(以下の)環境では問題ありませんでした。
% uname -a CYGWIN_NT-6.3 win8 2.2.0(0.289/5/3) 2015-08-03 12:51 x86_64 Cygwin
0 件のコメント:
コメントを投稿