2013-05-18 4 views
16

Ich arbeite mit einem C++ - Projekt und versuchen, es für die Verwendung von syntastic konfigurieren. In meinem Projekt habe ich eine verschachtelte Verzeichnisstruktur von Header-Dateien (Die tatsächliche verschachtelte Struktur ist viel schlimmer, das ist ein Beispiel).Einschließlich Header-Dateien rekursiv für syntastische

--libs  
    |---dir1 
     |---foo1.h  
    |---dir2 
     |---foo2.h 
     |---foo3.h 
     |---dir3 
       |---foo4.h 

ich die LIB-Dateien in meiner .vimrc Datei enthalten ist mit:

let g: syntastic_cpp_include_dirs = [ 'libs /']

nahm ich dies alles dauern würde, Header-Dateien rekursiv, aber nicht. Im Code beschwert sich syntastic mit dem Fehler 'keine solche Datei oder kein Verzeichnis gefunden'.

Wenn ich in ein bestimmtes Verzeichnis explizit die Variable ändern verweisen:

let g: syntastic_cpp_include_dirs = [ 'libs/dir2/dir3 /']

es funktioniert.

Meine Fragen:

  1. Wie wird syntastic so dass es rekursiv Header-Dateien von einer Gruppe von Verzeichnissen umfasst?
  2. Wie machst du das für mehrere Projekte? Das Bearbeiten der .vimrc-Datei beim Wechseln des Projekts, an dem ich gerade arbeite, klingt nicht richtig. Ich glaube, es muss einen besseren Weg geben.

EDIT:

ich nicht erwähnt, dass in meinem .vimrc, sind folgende Optionen vorhanden sind, für syntastic:

let g:syntastic_check_on_open=1 
let g:syntastic_enable_signs=1 
let g:syntastic_cpp_include_dirs = ['libs/dir2/dir3', 'libs/dir2 ] 
let g:syntastic_cpp_check_header = 1 
let g:syntastic_cpp_remove_include_errors = 1 
+0

Haben Sie versucht "let g: syntastic_cpp_check_header = 1"? – timss

+0

Ja, das tue ich. Ich habe jetzt die Konfigurationsoptionen hinzugefügt, die ich zu den Fragen hatte. Das tut mir leid. –

Antwort

28

Sie können alle Verzeichnisse, die nach Headerdateien pro Projekt gesucht werden, in das Projektstammverzeichnis in einer Datei .syntastic_cpp_config einschließen. Das Format dafür wäre dasselbe wie das Bereitstellen der -I-Direktiven für den Compiler.

Für Ihren Fall bedeutet dies:

  • Erstellen Sie eine Datei .syntastic_cpp_config unter sources (vorausgesetzt, das ist, wo Ihr Code und sources ist bei gleicher Tiefe Ebene in der Verzeichnishierarchie als libs).
  • Setzen Sie die folgenden Zeilen in es:

    -Ilibs/dir1

    -Ilibs/dir2

    -Ilibs/dir2/dir3

  • Beachten Sie die die Flaggen sind 1 pro Zeile.

  • Auf diese Weise müssen Sie nicht alle Include-Verzeichnisse in Ihrem .vimrc haben.

Sie können eine andere Datei, die diese benutzerdefinierte Konfiguration pro Projekt, das von der .vimrc globalen Variable g:syntastic_cpp_config_file angegeben zu halten, zB

let g:syntastic_cpp_config_file = '.my_custom_include_file_for_syntastic' 

Syntastic werden jedes Quellverzeichnis überprüfen und nach oben, bis es findet diese Datei und Verwenden Sie es dann zum Erstellen seiner Ausgabe.

Weitere Informationen finden Sie unter Syntastic wiki page, Old link.

0

Ich habe die gleiche Frage mit etwas Glück hatte. Ich habe jedoch festgestellt, dass syntaktisch die Ordner überprüft und keine Warnungen ausgibt, wenn ich den Anführungszeichen-Stil header includes verwende. Zum Beispiel, wenn Sie auf foo2.cpp arbeiten,

#include "dir3/foo4.h" 
#include "../dir1/foo1.h" 

speichern Halter enthält für Standard-Libs und alle Libs Sie wie hartzucodieren in vim fühlen.

Verwandte Themen