Как добавить путь включения в flycheck c / c ++ — clang?

Я попытался добавить путь к flycheck c / c ++ — лязг, но это не сработало.

я кладу foo.h в ~/local/include и добавил следующие строки в init.el:

(add-hook 'c++-mode-hook
(lambda () (setq flycheck-clang-standard-library "libc++")))
(add-hook 'c++-mode-hook
(lambda () (setq flycheck-clang-language-standard "c++1y")))
(add-hook 'c++-mode-hook
(lambda () (setq flycheck-clang-include-path
(list "$HOME/local/include/"))))

И в файле с именем test.cpp я написал

#include <foo.h>

flycheck сказал, что

Файл ‘foo.h’ не найден

Что я делаю неправильно? я использую emacs24, flycheck.el от package.el а также clang3.4,

7

Решение

использование expand-file-name а также ~ чтобы ссылаться на пути в вашем домашнем каталоге:

(add-hook 'c++-mode-hook
(lambda () (setq flycheck-clang-include-path
(list (expand-file-name "~/local/include/")))))

Flycheck не использует системную оболочку для запуска Clang, а также не пытается расширить параметры оболочки в командной строке. Следовательно, $HOME передается в прямом смысле в Clang, который, очевидно, не работает.

8

Другие решения

Я не хочу получать кредит от этого ответа, но это может быть полезно для кого-то.
Используя принятый ответ и комментарии, установите переменная муха с Переменные каталога:

У вас есть проект с исходным кодом C ++ в ~/myproject,
Добавить файл ~/myproject/.dir-locals.el со следующим содержанием:

((nil . ((eval . (setq flycheck-clang-include-path
(list (expand-file-name "~/myproject/include/")))))))

Это сработало для меня.

3

По вопросам рекламы [email protected]