c - 未找到 flycheck 头文件,但 makefile 是正确的

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

和生成文件

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 returned non-zero exit code 1, but no errors from output: In file included from /var/folders/f/ts3zs3cjbq1fqfhdfrl1w0000gn/T/flycheck87881gVK/glist.c:2: /usr/local/include/glib-2.0/glib.h:32:10: error: 'glib/galloca.h' file not found with include; use "quotes" instead In file included from /var/folders/_f/ts3_zs3cjbq1fqfhdfrl1w0000gn/T/flycheck87881gVK/glist.c:2: In file included from /usr/local/include/glib-2.0/glib.h:32: /usr/local/include/glib-2.0/glib/galloca.h:34:10: fatal error: 'glib/gtypes.h' file not found

Checker definition probably flawed.

代码仍然可以正确编译和运行。我不确定为什么找不到 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。

最佳答案

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/

相关文章:

位移时的 C 奇怪行为

r - 所有 R 关键字的列表

c++ - 加速 SDL2 的 makefile

python - 无法从 python subprocess.Popen 启动 make 命令

c - 需要随机数的猜谜游戏帮助

c - 为什么我的程序在 C 语言中显示错误的输出

c - 全局变量在 C 中神奇地改变值

emacs - 如何在 Emacs 中创建区分大小写的键绑定(bind)?

scala - Emacs 上的 Scaml 语法高亮显示

c++ - 将 gprof 与 LULESH 基准结合使用