ctagsに関する世界観です。
ctagsは、ソースファイルやヘッダファイルのインデックスを作って、エディタなどから関数やクラスなどの定義にジャンプすることができるソフトウェアです。
たとえば、「C/C++の勉強したから、いっそClang/LLVMの開発でもやってみるか!」と思い立った時、githubから以下のようなリポジトリを見て、ソースファイルを読んでみようと思ったとします。
そして、ソースファイルを見てみましょう。すると、#includeにヘッダファイルが山のようにあって、その下では見知らぬ関数やクラスが実行されています。
これを見て、「なんだ、こんなにヘッダファイルがある中から、自分で関数定義を探さなければいけないのか…」とあなたは落ち込み、「これは無理だ」と思って投げだすのではないでしょうか。
こんな時、ctagsがあれば、プログラマになる道を投げ出さなくてすみます。
ctagsは、プログラムの中のソースファイルやヘッダファイルのインデックスを作って、「関数を使っているところ」から「関数の元々の定義」にジャンプすることのできるソフトウェアです。
ctagsのサポートするエディタや使い方については以下をご覧ください。
ctagsがあれば、vimやemacsから「なんだこの関数」と思った時に瞬時にその定義を参照することができます。
言ってしまえば、「コンパイラ+テキストエディタ+ctags=きちんとできる入門者向けの開発環境」であると言えるでしょう。
また、ctagsはctagsという名前ながらたくさんのプログラミング言語に対応し、それぞれの言語に異なるtagsファイルを作成することができる。
また、Linuxカーネルのソースコードを閲覧するためのソフトウェアとして、lxrというのがあります。これも便利です。ソースファイルをタグ付けされたHTMLファイルにして、リンクをクリックすることで関数の定義や参照箇所をチェックできます。
Linuxカーネル限定で良いのであれば、オンラインからLinuxカーネルのlxrを参照できます。
また、Mozillaのソースコードはdxrから見ることができます。ディレクトリ構造についての説明もあります。
OpenGrokは高速で使いやすいソースコード閲覧・検索ツール。
特に以下のページからOSカーネルなどのコードを簡単に参照できる。個人的にHaikuが気になる。
「ctags使いたいけど、Linuxで開発したくないなあ」と思っている方。ctagsはWindowsでも動きます。
Windowsでgvim + ctagsを導入してしまえば、Linuxと同等の「快適vim環境」が構築できます。
また、Windowsで動くフリーのC/C++コンパイラを探しているなら、Clang/LLVMがおすすめ。MinGW(GNU開発ツールのWindows版)でも構いませんが、個人的におすすめなのはLLVMのWindows版の導入です。
GNU Grobal (gtags)もctagsと同様にソースコードをタグ付けして関数定義にジャンプすることができるソフトウェア。ソースコードを読むのがとても快適になる。
使い方は、まずgtagsコマンドでタグファイルを作成する。(-vは進歩状況を表示するオプションで、指定しなくてもよい。)
$ gtags -v
関数名から関数定義の含まれるソースコードのファイル名を得るには関数名をそのまま引数に与える。関数名には正規表現も使える。
$ global 関数名
ファイル名からファイルに含まれる関数のリスト(一覧)を得るには-fオプションを使う。
$ global -f ファイル名
関数が呼び出されている場所を検索するには-rオプションを使う。
$ global -r 関数名
-cオプションで関数名の一部から関数名を検索できる。
$ global -c 関数名の一部
ソースコードの全体をgrepで検索するには-gオプションを使う。
$ global -g 検索文字列
とする。
詳細情報の表示には-xオプションを指定する。
(以上はソースコードを快適に読むための GNU GLOBAL 入門 (前編) - まちゅダイアリー(2009-03-07)を参考に執筆しました。)
コマンドのglobalと同じことを、vimでは「:Gtags」に-r, -f, -gオプションを使うことで行える。
また、カーソルがある場所の単語で検索するには「:GtagsCursor」と入力することで、ジャンプすることができる。
入力するのが面倒なので、~/.vimrcにキーマップを記述しておこう。
(以上はソースコードを快適に読むための GNU GLOBAL 入門 (中編) - まちゅダイアリー(2009-03-08)を参考に執筆・引用しました。)
viも参照のこと。
GNU GrobalはvimやEmacsなどのテキストエディタで閲覧するだけではなく、タグ付けされた状態のHTMLファイルも吐き出すことができる。ブラウザでコードをクリックして見たい僕のような人間には便利。
gtagsコマンドでタグファイルを作成した状態で、htagsコマンドを実行する。
$ gtags -v $ htags -ansx
-ansxオプションは、-aがアルファベット順に作成、-nが行番号の表示、-sが変数名のような関数以外のシンボルにもリンク、-xがXHTMLでの出力となる。
(以上はソースコードを快適に読むための GNU GLOBAL 入門 (後編) - まちゅダイアリー(2009-03-09)を参考に執筆しました。)
オープンソースのJavaの統合開発環境のEclipseでも、F3キーを押すことで関数の宣言にジャンプできる。Eclipseを参照のこと。
ジェットブレインズ社のRubyMineやPyCharmでも、関数名やクラス名から関数定義やクラス定義にジャンプする機能があります。IntelliJ IDEAを参照のこと。
関数の呼び出しから関数定義へとジャンプできる。
巨大なソースコードを読むためには必須のツール。
ちなみにEclipseではF3キーで関数定義にジャンプできる。