[ C++で開発 ]

Emacs flymakeで編集中にコンパイルエラー検出

統合開発環境Eclipseは、C++開発でもソースを編集中にコンパイルエラーとなる箇所を検出します。これは大変うれしい機能ですが、なんとEmacsでも同様の機能があります。

Emacs 22でflymake.elが標準搭載されており、これを使ってEmacs上でソースコードを編集中にコンパイルエラー検出を実現します。

使用方法-Linux/GCC

Linux/GCC上でのflymakeの使用方法を記述します。

簡単な使用方法

flymakeは、makeコマンドを呼び出して編集中のバッファのコンパイルエラーチェックを行います。makeの呼び出しは以下のようになるので、対応するMakefileを記述します。

make -s -C . CHK_SOURCES=hoge.cpp SYNTAX_CHECK_MODE=1 check-syntax

Makefileは、コンパイルエラーチェックのためにターゲットcheck-syntaxを用意する必要があります。

Makefile
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のときは、バックグラウンドでソースコードのコンパイルチェックが動き、エラーのある箇所がハイライト表示されます。また、エラーメッセージはホバー表示(マウスカーソルをエラーのハイライト表示箇所に持っていくと、エラーまたは警告メッセージがポップアップ表示)されます。

参考URL

C++編集時は自動でflymakeモードにする

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