2013-05-18 13 views
16

Sto lavorando con un progetto C++ e sto provando a configurarlo per utilizzare syntastic. Nel mio progetto ho una struttura di directory annidata di file di intestazione (la struttura nidificata reale è molto peggiore, questo è un esempio).Compreso i file di intestazione in modo ricorsivo per syntastic

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

ho incluso i file lib nel mio file Vimrc utilizzando:

Sia G: syntastic_cpp_include_dirs = [ 'libs /']

ho assunto questo sarebbe prendere tutto il i file di intestazione in modo ricorsivo, ma non è così. Nel codice, syntastic si lamenta dell'errore "nessun file o directory trovata".

Quando cambio esplicitamente la variabile per fare riferimento a una specifica directory:

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

funziona.

Le mie domande:

  1. Come si configura syntastic in modo che esso include i file di intestazione di una serie di directory ricorsivamente?
  2. Come si fa per più progetti? Modificare sempre il file .vimrc mentre cambio il progetto su cui sto lavorando non sembra corretto. Credo che ci debba essere un modo migliore.

EDIT:

Non ho menzionato che nel mio Vimrc, le seguenti opzioni sono presenti per 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

Hai provato 'let g: syntastic_cpp_check_header = 1'? – timss

+0

Sì, lo so. Ho aggiunto le opzioni di configurazione che ho avuto per le domande ora. Mi dispiace per quello –

risposta

28

È possibile includere tutte le directory in cui cercare i file di intestazione per progetto nella directory radice del progetto in un file .syntastic_cpp_config. Il formato per farlo equivarrebbe a fornire le direttive -I al compilatore.

Per il vostro caso significa:

  • Creare un file .syntastic_cpp_config sotto sources (supponendo che è dove il codice è e sources è a uno stesso livello di profondità nella gerarchia delle directory come libs).
  • Mettere le seguenti linee in esso:

    -Ilibs/dir1

    -Ilibs/dir2

    -Ilibs/dir2/dir3

  • Nota le bandiere sono 1 per riga.

  • In questo modo non è necessario disporre di tutte le directory di inclusione nel proprio .vimrc.

È possibile avere un file diverso per tenere questa configurazione personalizzata per ogni progetto, specificato dalla .vimrc variabile globale g:syntastic_cpp_config_file, ad esempio

let g:syntastic_cpp_config_file = '.my_custom_include_file_for_syntastic' 

Syntastic controllerà ogni directory sorgente e verso l'alto finché non trova il file e quindi usalo per produrre la sua uscita.

Vedere Syntastic wiki page, Old link per ulteriori dettagli.

0

ho avuto la stessa domanda con poca fortuna. Tuttavia, ho scoperto che se uso l'intestazione dello stile delle virgolette include, sintattica controllerà in modo appropriato le cartelle e non emetterà avvisi. Ad esempio, se stai lavorando su foo2.cpp,

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

Salva staffa comprende per librerie standard e eventuali librerie si sente come hardcoding in vim.

Problemi correlati