Заголовочный файл flycheck не найден, но верный make-файл

Я использую emacs с flycheck для проверки синтаксиса исходного кода на 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> Я получаю следующую ошибку в минибуфере:

Средство проверки c / C++-clang вернул ненулевой код завершения 1, но ошибок при выводе нет: в файле, включенном в /var/folder / f / ts3 zs3cjbq1fqfhdfrl1w0000gn / T / flycheck87881gVK / glist.c: 2: / usr / local / include /glib-2.0/glib.h:32:10: ошибка: файл 'glib/galloca.h' не найден в include; вместо этого используйте "цитаты" В файле, включенном в /var/folder / _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 очень проста и в остальном работает очень хорошо. Я использую версию 20130904.2245, установленную от elpa.

1 ответ

Решение

Flycheck не использует Makefiles и не пытается их проанализировать. Я не могу не задаться вопросом, как вы вообще поняли эту идею, учитывая, что такое поведение не описано в руководстве, и никакой проверки синтаксиса для make-файлов вообще не существует.

Flycheck запускает Clang напрямую. Вам нужно явно настроить путь включения для проверки синтаксиса, установив flycheck-clang-include-path соответственно. Вы должны сделать это самостоятельно, это не будет сделано автоматически в зависимости от вашего Makefile.

Вы можете установить путь через локальные переменные file / dir или написать собственный код Emacs Lisp для анализа вашего Makefile.

Другие вопросы по тегам