2014-06-07 12 views
6

Ich habe versucht, Include-Pfad zu flycheck c/C++ - clang hinzuzufügen, aber es hat nicht funktioniert.Wie fügt man den Pfad zum Flycheck c/C++ hinzu - clang?

Ich habe foo.h in ~/local/include und fügte hinzu, die folgenden Zeilen 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/")))) 

Und in einer Datei test.cpp rief ich schrieb

#include <foo.h> 

flycheck sagte, dass

‚foo .h 'Datei nicht gefunden

Was mache ich falsch? Ich benutze emacs24, flycheck.el von package.el und clang3.4.

Antwort

6

Verwenden expand-file-name und ~ in Pfaden in Ihrem Home-Verzeichnis zu verweisen:

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

Flycheck nicht den System-Shell Clang läuft nicht verwendet, auch nicht versuchen, es anders Shell Parameter in Befehlszeilen zu erweitern. Daher wird $HOMEwörtlich an Clang übergeben, was offensichtlich nicht funktioniert.

+0

Gibt es eine Möglichkeit, diese Art von Konfiguration pro Projekt durchzuführen? – Magnus

+0

@Magnus Emacs bietet zu diesem Zweck Verzeichnisvariablen an. Weitere Informationen finden Sie im Handbuch. – lunaryorn

+0

Ja, das ist natürlich eine Option, aber es ist ziemlich begrenzt; Nur Variablenwerte sind erlaubt, und 'flycheck-clang-include-path' behandelt reale Pfade relativ zu der zu überprüfenden Datei, was bedeutet, dass kompliziertere Code-Organisationen schwer zu unterstützen sind. – Magnus

1

Ich möchte nicht durch diese Antwort Kredit bekommen, aber es könnte für jemanden nützlich sein.
die akzeptierte Antwort und Kommentare Mit flycheck Variable mit Directory-Variablen zu setzen:

Sie ein Projekt in ~/myproject mit dem C++ Quellcode haben.
Fügen Sie die Datei ~/myproject/.dir-locals.el mit folgendem Inhalt:

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

die für mich gearbeitet.