[ 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")