Заголовочный файл 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.