有没有简单/自动的方法来配置flycheck或flymake
在写入文件时显示错误注释
在Linux内核源代码树中?假设我正在努力
fs/proc/cmdline.c我想让flycheck掉下来
两个目录并执行“make fs/proc/cmdline.o”,然后
然后注释结果。假设ARCH和CROSS_COMPILE
在外部设置。
最佳答案
我一直在想自己做这个-这是我得到的:
您需要找到内核源代码树的基础,因此查找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)
局限性:
source_flymake.c
(请确保您忽略flymake标记,直到它遍历已保存的文件)。我的按键会强制重新运行flymake。 push
行)-我对flymake的了解不足,无法使其一次性覆盖单个缓冲区。 头文件,临时文件和外部模块的限制可以通过修补内核Makefile本身来克服,目前我想避免这种情况。