2014-06-07 13 views
6

Próbowałem dodać ścieżkę dołączania do flycheck c/C++ - clang, ale to nie zadziałało.Jak dodać ścieżkę włączenia do flickheck c/C++ - clang?

kładę foo.h w ~/local/include i dodaje następujące linie do 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/")))) 

A w pliku o nazwie test.cpp pisałem

#include <foo.h> 

flycheck że

„foo .h plik nie został znaleziony

Co robię źle? Używam emacs24, flycheck.el z package.el i .

Odpowiedz

6

Zastosowanie expand-file-name i ~ odnosi się do ścieżki w katalogu domowym:

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

Flycheck nie używa powłoki systemu do uruchomienia dzyń, ani też w inny sposób próbować rozwinąć parametry powłoki w linii poleceń. W związku z tym $HOME jest przekazywane dosłownie na Clang, co oczywiście nie działa.

+0

Czy istnieje sposób wykonywania tego rodzaju konfiguracji dla poszczególnych projektów? – Magnus

+0

@Magnus Emacs oferuje w tym celu Zmienne katalogu. Więcej informacji można znaleźć w instrukcji obsługi. – lunaryorn

+0

Tak, to oczywiście opcja, ale jest raczej ograniczona; dozwolone są tylko wartości zmiennych, a 'flycheck-clang-include-path' traktuje ścieżki realitve względem sprawdzanego pliku, co oznacza, że ​​trudniejsze do obsługi są bardziej skomplikowane organizacje kodu. – Magnus

1

Nie chcę, aby ta ocena była wiarygodna, ale może być przydatna dla kogoś.
zastosowaniem przyjętej odpowiedzi i komentarze do ustaw flycheck zmienną z zmiennych katalogowych:

masz projekt z kodem C++ źródłowego w ~/myproject.
Dodaj plik ~/myproject/.dir-locals.el o następującej treści:

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

który pracował dla mnie.

Powiązane problemy