[ C++で開発 ]
統合開発環境Eclipseは、C++開発でもソースを編集中にコンパイルエラーとなる箇所を検出します。これは大変うれしい機能ですが、なんとEmacsでも同様の機能があります。
Emacs 22でflymake.elが標準搭載されており、これを使ってEmacs上でソースコードを編集中にコンパイルエラー検出を実現します。
Linux/GCC上でのflymakeの使用方法を記述します。
flymakeは、makeコマンドを呼び出して編集中のバッファのコンパイルエラーチェックを行います。makeの呼び出しは以下のようになるので、対応するMakefileを記述します。
make -s -C . CHK_SOURCES=hoge.cpp SYNTAX_CHECK_MODE=1 check-syntax
Makefileは、コンパイルエラーチェックのためにターゲットcheck-syntaxを用意する必要があります。
PHONY: check-syntax check-syntax: $(CXX) -Wall -Wextra -pedantic -fsyntax-only $(CHK_SOURCES) |
コンパイルエラーチェックを厳しく見るために、-Wallと-Wextraを指定しています。また、GCC拡張を許さない場合は-pedanticを追加します。コンパイルチェックのみ行えばよいので、-fsyntax-onlyを指定しています。
なお、コンパイル時指定のマクロ定義やインクルードファイルのパス等追加指定があれば、このMakefileを修正する必要があります。
Makefileと同じディレクトリにあるC++ソースファイルを編集し、M-x flymake-modeを実行します。flymake-modeのときは、バックグラウンドでソースコードのコンパイルチェックが動き、エラーのある箇所がハイライト表示されます。また、エラーメッセージはホバー表示(マウスカーソルをエラーのハイライト表示箇所に持っていくと、エラーまたは警告メッセージがポップアップ表示)されます。
.emacsに以下を記述します。
; C++モードでは flymakeを有効にする (add-hook 'c++-mode-hook '(lambda () (flymake-mode t)))
デフォルトのエラー行表示は、背景色がピンクで文字が明るい色の場合、何が書いてあるのか見えなくなってしまいます。
また、日本語ロケールでGCCを使用すると、コンパイルのwarningメッセージが「警告」と訳されてwarningと認知できないため、すべてエラー色となってしまいます。そこで、make実行時にLANG=Cでロケールを英語にしています。
.emacsに以下を記述します。
(require 'flymake) ; 日本語ロケールではerrorとwarningが区別できないのでmake実行時は英語ロケールで (defun flymake-get-make-cmdline (source base-dir) (list "make" (list "-s" "-C" base-dir (concat "CHK_SOURCES=" source) "SYNTAX_CHECK_MODE=1" "LANG=C" "check-syntax"))) ; flymakeのエラー行表示色 (set-face-background 'flymake-errline "red3") (set-face-background 'flymake-warnline "orange3")