2013-05-18 44 views
16

我正在使用C++項目並嘗試將其配置爲使用syntastic。在我的項目中,我有一個嵌套的目錄結構的頭文件(實際嵌套結構更糟糕,這是一個例子)。遞歸地包含用於合成的頭文件

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

我已經包含用我的.vimrc文件的lib文件:

設G:syntastic_cpp_include_dirs = [ '庫/']

我以爲這會採取一切頭文件遞歸,但它沒有。在代碼中,Synthetic抱怨錯誤'找不到這樣的文件或目錄'。

當我明確地改變變量來引用一個特定的目錄:

設G:syntastic_cpp_include_dirs = [ '庫/ DIR2/DIR3 /']

它的工作原理。

我的問題:

  1. 如何配置syntastic以便它包括一組目錄遞歸的頭文件?
  2. 你如何爲多個項目做到這一點?當我切換正在處理的項目時,總是編輯.vimrc聽起來不對。我相信肯定有更好的辦法。

編輯:

我沒有提到我的.vimrc,下面的選項都存在於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

你試過'let g:syntastic_cpp_check_header = 1'嗎? – timss

+0

是的,我喜歡。我已經添加了我現在提出的問題的配置選項。對於那個很抱歉。 –

回答

28

您可以在文件.syntastic_cpp_config的文件項目根目錄中包含每個項目的所有要搜索頭文件的目錄。這樣做的格式與向編譯器提供-I指令相同。

對於您的情況下,它的意思是:

  • sources下創建一個文件.syntastic_cpp_config(假設這就是你的代碼和sources是在目錄層次結構中的相同深度水平libs)。
  • 把下面的行它:

    -Ilibs/dir1

    -Ilibs/dir2

    -Ilibs/dir2/dir3

  • 注意的標誌是1元線。

  • 這樣,您不必在您的.vimrc中包含所有包含目錄。

你可以有一個不同的文件來保存每個項目的這個自定義配置,由.vimrc全局變量g:syntastic_cpp_config_file規定,如

let g:syntastic_cpp_config_file = '.my_custom_include_file_for_syntastic' 

Syntastic會檢查每個源目錄和向上,直到找到該文件,並然後用它來產生它的輸出。

查看Syntastic wiki page, Old link瞭解更多詳情。

0

我已經受夠了一點運氣同樣的問題。但是,我發現如果使用引號標記樣式標題包含,語法將適當地檢查文件夾並且不發出警告。例如,如果你的工作foo2.cpp,

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

保存支架包括標準庫,你覺得像硬編碼到vim的任何庫。