2013-05-18 10 views
16

Pracuję z projektem C++ i próbuję skonfigurować go do korzystania z syntastycznych. W moim projekcie mam zagnieżdżoną strukturę katalogów plików nagłówkowych (rzeczywista struktura zagnieżdżona jest znacznie gorsza, to jest przykład).W tym pliki nagłówkowe rekurencyjnie dla syntastycznego

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

mam włączone lib pliki w moim pliku .vimrc na podstawie:

Niech G: syntastic_cpp_include_dirs = [ 'libs /']

Przypuszczałem to zajęłoby cały Pliki nagłówkowe rekursywnie, ale tak nie jest. W kodzie syntastyczne skarży się na błąd "nie znaleziono takiego pliku lub katalogu".

Kiedy wyraźnie zmienić zmienną odnieść się do konkretnego katalogu:

Niech G: syntastic_cpp_include_dirs = [ 'libs/dir2/dir3 /']

to działa.

Moje pytania:

  1. jaki sposób skonfigurować syntastic tak, że zawiera pliki nagłówkowe z zestawu katalogów rekurencyjnie?
  2. Jak to zrobić w przypadku wielu projektów? Zawsze edytowanie pliku .vimrc podczas przełączania projektu, nad którym pracuję, nie brzmi dobrze. Uważam, że musi istnieć lepszy sposób.

EDIT:

nie wspominając, że w moim .vimrc, są obecni syntastic następujące opcje:

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

Czy próbowałeś 'let g: syntastic_cpp_check_header = 1'? – timss

+0

Tak, mam. Dodałem opcje konfiguracji, które miałem teraz do pytań. Przepraszam za to. –

Odpowiedz

28

Można uwzględnić wszystkie katalogi, które mają być wyszukiwane dla plików nagłówkowych dla każdego projektu w katalogu głównym projektu w pliku .syntastic_cpp_config. Format do tego będzie taki sam, jak dostarczanie dyrektyw do kompilatora -I.

Twoim przypadku oznacza to:

  • Utwórz plik .syntastic_cpp_config pod sources (zakładając, że tam jest Twój kod i sources jest na tym samym poziomie głębokości w hierarchii katalogów jako libs).
  • umieścić następujące wiersze w nim:

    -Ilibs/dir1

    -Ilibs/dir2

    -Ilibs/dir2/dir3

  • Uwaga te flagi są 1 w wierszu.

  • W ten sposób nie musisz mieć wszystkich katalogów uwzględniania w swoim .vimrc.

Możesz mieć inny plik, aby utrzymać tę niestandardową konfigurację jednego projektu, określony przez zmienną globalną g:syntastic_cpp_config_file.vimrc, np

let g:syntastic_cpp_config_file = '.my_custom_include_file_for_syntastic' 

Syntastic sprawdzi każdy katalog źródłowy i do góry, aż znajdzie ten plik i następnie użyj go do wytworzenia swojej wydajności.

Zobacz Syntastic wiki page, Old link więcej szczegółów.

0

miałem to samo pytanie z odrobiną szczęścia. Jednakże odkryłem, że jeśli użyję nagłówka stylu znaku zapytania, syntaktyczny odpowiednio sprawdzi foldery i nie wyda ostrzeżeń. Na przykład, jeśli pracujesz na foo2.cpp,

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

Zapisz wspornik obejmuje standardowych bibliotekami oraz wszelkich bibliotekami masz ochotę hardcoding w vim.