找不到flycheck头文件,但makefile是正确的

Ces*_*sar 3 c emacs makefile clang flycheck

我正在使用带有flycheck的emacs来检查C源代码语法并尝试使用glib.我的代码编译并正确运行,但是flycheck会在行中报告文件未找到错误#include <glib.h>并停止报告更多错误,从而无法实现其目的.

这是我的示例源文件:

#include <stdio.h>
#include <glib.h>

GList* list = NULL;

int main() {
    list = g_list_append(list, "a");
    list = g_list_append(list, "b");
    list = g_list_append(list, "c");

    for ( ; list!=NULL; list=list->next) {
        printf("%s\n", (char*)list->data);
    }
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

和makefile

P=glist
OBJECTS=
CFLAGS=-g -Wall -O3 `pkg-config --cflags glib-2.0`
LDLIBS=`pkg-config --libs glib-2.0`
CC=gcc-4.9

$(P): $(OBJECTS)
Run Code Online (Sandbox Code Playgroud)

如果我将包含行更改为读取#include <glib-2.0/glib.h>,则会在迷你缓冲区中报告以下错误:

检查器c/c ++ - clang返回非零退出代码1,但输出没有错误:在/ var/folders/f/ts3中包含的文件zs3cjbq1fqfhdfrl1w0000gn/T/flycheck87881gVK/glist.c:2:/ usr/local/include /glib-2.0/glib.h:32:10:错误:找不到包含的'glib/galloca.h'文件; 使用"引号"代替/ var/folders/_f/ts3 _zs3cjbq1fqfhdfrl1w0000gn/T/flycheck87881gVK/glist.c中包含的文件:2:/usr/local/include/glib-2.0/glib.h:32中包含的文件: /usr/local/include/glib-2.0/glib/galloca.h:34:10:致命错误:找不到'glib/gtypes.h'文件

检查器定义可能存在缺陷.

代码仍然编译并正确运行.我不知道为什么它找不到,glib/gtypes.h因为它存在于其中一个包含的目录中.输出来自pkg-config --cflags glib-2.0:

-I/usr/local/Cellar/glib/2.36.4/include/glib-2.0 -I/usr/local/Cellar/glib/2.36.4/lib/glib-2.0/include -I/usr/local/opt/gettext的/包括

清单 ls /usr/local/Cellar/glib/2.36.4/include/glib-2.0/glib/gtypes.h

/usr/local/Cellar/glib/2.36.4/include/glib-2.0/glib/gtypes.h

并列出 ls /usr/local/include/glib-2.0/glib/gtypes.h

/usr/local/include/glib-2.0/glib/gtypes.h

所以文件就在那里.我不介意切换到flymake如果flycheck是责备,但我不确定这是我的设置或flycheck本身的问题.加上flycheck配置很简单,否则效果很好.我正在使用从elpa安装的版本20130904.2245.

lun*_*orn 5

Flycheck不使用Makefile,也不试图解析它们.我不禁想知道你是如何得到这个想法的,因为手册中没有记录这样的行为,甚至不存在make文件的语法检查器.

Flycheck 直接运行Clang.您需要通过相应的设置显式配置包含路径以进行语法检查flycheck-clang-include-path.您必须自己这样做,这不是基于您的Makefile 自动完成的.

您可以通过file/dir局部变量设置路径,或者编写一些自定义的Emacs Lisp代码来解析Makefile.