我正在使用带有 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;
}

和生成文件
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>,我会在迷你缓冲区中报告以下错误:



代码仍然可以正确编译和运行。我不确定为什么它找不到 glib/gtypes.h,因为它存在于包含的目录之一下。 pkg-config --cflags glib-2.0 的输出是:



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


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


所以文件就在那里。如果要怪 flycheck,我不介意改用 flymake,但我不确定这是我的设置问题还是 flycheck 本身的问题。加上 flycheck 配置非常简单,否则效果很好。我正在使用从 elpa 安装的版本 20130904.2245。

最佳答案

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

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

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

关于c - 未找到 flycheck 头文件,但 makefile 是正确的,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18691338/

10-11 22:07
查看更多