Linux カーネル ソース ツリーのファイルに書き込み中にエラー注釈を表示するように flycheck または flymake を設定する簡単で自動化された方法はありますか? fs/proc/cmdline.c で作業していると仮定すると、flycheck で 2 つのディレクトリに移動して「make fs/proc/cmdline.o」を実行し、結果に注釈を付けます。ARCH と CROSS_COMPILE が外部で設定されていると仮定します。
質問する
526 次
3 に答える
3
私はこれを自分でやろうと考えていました-これが私が持っているものです:
カーネル ソース ツリーのベースを見つける必要があるため、探すというデフォルトのflymake
取引はMakefile
非生産的です。ソースベースの場所を特定し、通常のカーネル makefile をラップするために倍増する独自のファイルを追加します。
カーネル ソース ツリーのベースにファイルを追加しますflymake.mk
(独自のクロス コンパイルのニーズに合わせて構成します)。
ARCH=mips
CROSS_COMPILE=mips-linux-gnu-
export ARCH
export CROSS_COMPILE
.PHONY: check-syntax
check-syntax:
make -f Makefile $(patsubst %_flymake.o,%.o,$(patsubst %.c,%.o,$(CHK_SOURCES)))
要点は、「_flymake.c」を取り除き、実際のファイルのみをコンパイルし、構文だけではなく、実際のファイルをビルドすることです。これにより、誤って作成することを回避できますfile_flymake.o
flymake がそれを探してflymake.mk
実行するように説得する必要がありますcheck-syntax
- これらを .emacs に追加してください:
;; Build a custom command-line using flymake.mk
(defun flymake-get-kernel-make-cmdline (source base-dir)
(list "make"
(list "-s"
"-f"
"flymake.mk"
"-C"
base-dir
(concat "CHK_SOURCES=" source)
"SYNTAX_CHECK_MODE=1"
"check-syntax")))
;; Search for flymake.mk to locate kernel tree base
(defun flymake-kernel-make-init ()
(flymake-simple-make-init-impl 'flymake-create-temp-inplace t t "flymake.mk" 'flymake-get-kernel-make-cmdline))
;; Register against .c files under /linux/ or /kernel/
;; Since the list is parsed in order use `push`
(push '(".+/\\(linux\\|kernel\\)/.+\\.c$" flymake-kernel-make-init) flymake-allowed-file-name-masks)
制限:
- ヘッダー ファイルを解析できません
- flymake 一時ファイルを解析できません
source_flymake.c
(保存されたファイルを超えるまで flymake マークアップを無視してください)。flymake を強制的に再実行するキーストロークがあります。 - 外部モジュールでの flymake のサポートなし
- path-matcher の事前登録が必要です (
push
上記の行を参照) - flymake について、1 つのバッファを 1 回限りで上書きできるようにするのに十分な知識がありません。
ヘッダー、一時、および外部モジュールの制限は、カーネルの Makefile 自体にパッチを適用することで克服できますが、現時点では回避したいと考えていました。
于 2015-04-20T12:51:38.443 に答える