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

时间:2013-09-09 04:07:45

标签: 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;
}

和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)

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

  

Checker c / c ++ - clang返回非零退出代码1,但没有错误   输出:包含在的文件中   /var/folders/f/ts3zs3cjbq1fqfhdfrl1w0000gn/T/flycheck87881gVK/glist.c:2:   /usr/local/include/glib-2.0/glib.h:32:10:错误:&#39; glib / galloca.h&#39;文件   找不到包含;使用&#34;报价&#34;而是包含在文件中   从   /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:致命错误:   &#39;油嘴/ gtypes.h&#39;找不到文件

     

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

代码编译并正确运行。我不确定为什么它找不到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 / include

列出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

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

1 个答案:

答案 0 :(得分:5)

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

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

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