2015年10月1日木曜日

emacsのflymakeがエラーで文句をいう件について

最近でるflymakeのエラーがウザい


OpenSolaris勉強会でメモリまわりのお話を聞きつつ、illumosのカーネルコードを追っかける事が多くなった今日この頃ですが、最近、私のemacsがCのソースファイルを開くと以下のエラーを吐くようになってしまいました。

Flymake: Configuration error has occurred while running (make -s -C ./ CHK_SOURCES=ioctl_app_flymake.c SYNTAX_CHECK_MODE=1 check-syntax). Flymake will be switched OFF >
これがウザい、いつか直そうと思いつつ、面倒くさいので放置していましたが、あまりにウザいので、修理を決意。

check-syntaxを書けよ


結論からいうと、Makefileに「check-syntax」ターゲットが無いのが原因だったらしい。なので、Makefileに書いてみた

CFLAGS +=  -Wall
CFILES = devone.c

obj-m += devone.o
sample-objs := $(CFILES:.c=.o)

all:
        make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules

clean:
        make -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean

check-syntax:
        gcc -o null -Wall -Wextra -pedantic -fsyntax-only $(CHK_SOURCES)

その後、Cのソースファイルを開いてみるとエラーは出ません
まぁそれはいいとして、今までのソースのために全部にMakefileを作成しそれを書くのは無理なので、emacs側にcheck-syntaxが実行できない場合(やるんだけどエラーを返してきた場合)、そのチェックを無視するように、emacsの設定ファイルに追加する。

(defadvice flymake-post-syntax-check (before flymake-force-check-was-interrupted)
  (setq flymake-check-was-interrupted t))
(ad-activate 'flymake-post-syntax-check)

こんな感じで追加してやると、Makefileが無くてもエラーが出ない、これで快適にコードを追っかけることができます、意味分からんが...