Toshiyuki Kawanishi Blog


2008
12 . 14

燃え上がれC言語 その3 ― Xrefactory

となりの何とかは素敵に見えるもの。アジャイルと言えばJavaかLLだよねと。しかし、諦めるのはまだ早い。まだまだ、C言語でも出来ることがあるのでは――

という訳で、今日は Xrefactory をご紹介しようと思います。Xrefactory は Emacs 上で動作する C/C++ 用のリファクタリングブラウザです。(Viな方々はすみません。頑張れば、コマンドラインからも使えますので......)
って、いまさら紹介するまでもない知る人ぞ知る的なツールだと思います。では、何故いまさら取り上げたのか......

それは、Xrefactory がC言語でも使えることは置いておかれて、「C++用」の素敵なリファクタリングブラウザとして紹介されることが多いからです。確かに、まったくその通りなのですが、Emacs上のツールなのに有料ということで敬遠されてしまうという面もあるのではないかと思います。

ただ、実は、Xrefactoryには C/C++ バージョンと C/Java バージョンがあって、C/Javaバージョンの方はフリーなんです。C言語で使用する場合は、このフリーの方で十分使えます。という訳で、C言語で闘う皆さんは、フリーバージョンの方を試してみてはどうでしょうか?


ダウンロードは以下から。


あとは、ソースコードから make すればOK。(i86のLinux用にはバイナリも用意されています。)

    $ cd xrefactory-1.6.10-src/xref-any/src
    $ make -f <各OS用のMakefile※>

※ Makefile.linux、Makefile.macosx、Makefile.windowsなどが用意されています。


ただし、Windows上(Cygwin/Mingw)でコンパイルする場合は、以下の点に注意が必要です。まず、システムコールのsleep関数がありませんと言われてしまうので、editor.c 876行目のsleep関数を、先頭が大文字のSleep関数に書き換える必要があります。また、Zlibコンパイル用のMakefileがデフォルトだと cc を使うように設定されているので、一度 configure し直す必要があります。あとは、他のOSと同様に src ディレクトリで make すれば大丈夫。

    $ cd xrefactory-1.6.10-src/xref-any/lib/zlib
    $ ./configure

すると、xref (もしくは xref.exe)という実行ファイルが出来上がります。これを適当なディレクトリにコピーしてください。

さらに、Emacs 上で起動するためには xrefactory-1.6.10-src/env/emacs/xref.el と xrefactory-1.6.10-src/env/emacs/xrefactory.el の二つの elisp が必要なので、これを適当な場所にコピーします。そして .emacs を変更。

    (setq load-path (cons "<elispコピーディレクトリ>" load-path))
    (setq exec-path (cons "<xref実行ファイルコピーディレクトリ>" exec-path))
    (load "xrefactory")

Emacs上で使ってみると、以下のようになります。



代表的な機能は以下の通り。
  • F6: 定義を参照。関数や変数が定義されている場所にジャンプします。
  • F8: 補完。変数名、関数名が補完できます。また、構造体のメンバなども補完できます。
  • F11: リファクタリング。変数/関数名の変更や、関数抽出などのリファクタリングが行えます。

なお、初回起動時はプロジェクト名の設定や、ソース/ヘッダディレクトリの設定などが必要となります。

詳しくは、xrefactory-1.6.10-src/xref-any/doc/cexercise 配下にある index.c を開いてみてください。ソースコードのコメントにチュートリアルが記載されています。

[参考] ひげぽん OSとか作っちゃうかMona-: C++のリファクタリングツール Xrefactory


これでC言語ライフも少しは幸せに。燃え上がれC言語、はたして続きはあるのか......
2009/04/10 d5884 emacs elisp
2009/02/04 komugix
2008/12/27 yaotti toread