工欲善其事必先利其器,一个高效的代码检查工具会大大提升咱们的开发效率。flycheck是Emacs中经常使用的一个代码编译检查工具,本文记录配置它的时候遇到的一些问题以及解决方法。html
flycheck的基本原理很简单,就是在须要作检查的时候(时机多是你保存了某个文件,或者改文件打开后idle了若干时间),使用编译工具把你当前的源文件编译一遍,有问题就显示在当前buffer中。对于C++代码,它的作法就是用gcc或者g++把当前源文件编译一遍。理解了原理,遇到问题后就好解决了。c++
1,错误行高亮问题json
我想修改错误行的高亮方式,个人作法是直接修改flycheck.el源文件,对于C++代码,修改下面的地方就能够:工具
732(defface flycheck-error 733 '((((supports :underline (:style wave))) 734 :underline (:style wave :color "cyan") 735 :background yellow) // 这一行是我加的 736 (t 737 :underline t :inherit error)) 738 739 "Flycheck face for errors." 740 :package-version '(flycheck . "0.13") 741 :group 'flycheck-faces) 742
我这样改的目的是将错误行的背景修改为黄色,这样更醒目一些。spa
2,打开cpp文件后,flycheck在include出显示错误,说找不到该头文件code
上面说了flycheck的工做原理,找不到头文件,说明flycheck在用gcc编译源代码时没找到头文件,经过阅读flycheck.el代码能够看出,经过设置变量flycheck-gcc-include-path能指定头文件路径,对于一个大型C++项目来讲,头文件可能散落在不少目录下面,这能够经过在项目根目录下面生成一个名叫.dir-locals.el的文件,在它里面指定gcc编译的时候的头文件路径,就像下面这样:server
1((c++-mode . ((flycheck-gcc-include-path . ( 2 "/usr/include" 3 "/home/cobbliu/thirdparty/gcc-4.9.2/include" 4 "/home/admin/jinxin/project/include" 5 "/home/admin/jinxin/project/chunkserver/include")))))
若是头文件目录很是多,能够经过Bear来生成compile_commands.json,而后对compile_commands.json作一些处理拿出全部的头文件路径写到.dir-locals.el中htm
3,打开cpp文件后,flycheck并无起做用blog
我打开了一个cpp文件,手动写了一行错误的代码,可是flycheck并无工做,这个时候须要看一些flycheck在编译当前文件的时候具体出了什么错误,详情见http://www.flycheck.org/en/latest/user/troubleshooting.html。简单地说,就是使用M-x flycheck-compile,而后键入c/c++-gcc让flycheck手动编译一次,它的编译信息会在一个单独的Buffer中显示,flycheck没有工做确定是编译的时候出了什么问题,根据Buffer中显示的问题去逐一解决。开发
4,.h文件没有被flycheck作检查
.h文件被emacs使用c-mode打开了,能够在.emacs中使用下面的命令让emacs用c++-mode打开.h文件:
add-to-list 'auto-mode-alist '("\\.h\\'" . c++-mode))
5,flycheck-compile发现编译错误太多,好比变量未定义等错误
这主要是由于flycheck在使用gcc编译源文件的时候,加上了-Wall选项,要想关闭改选项,在.emacs中修改变量flycheck-gcc-warnings的值,像下面这样:
(add-hook 'c++-mode-hook (lambda () (setq flycheck-gcc-warnings nil)))
不过不推荐这么作。