20

私は C++ プロジェクトで作業しており、シンタスティックを使用するように構成しようとしています。私のプロジェクトでは、ヘッダー ファイルのネストされたディレクトリ構造があります (実際のネストされた構造はもっと悪いです。これは一例です)。

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

以下を使用して、.vimrc ファイルに lib ファイルを含めました。

let g:syntastic_cpp_include_dirs = [ 'libs/']

これはすべてのヘッダー ファイルを再帰的に取得すると想定していましたが、そうではありません。コードでは、syntastic は「そのようなファイルまたはディレクトリが見つかりません」というエラーを訴えます。

特定のディレクトリを参照するように変数を明示的に変更すると、次のようになります。

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

できます。

私の質問:

  1. 一連のディレクトリのヘッダー ファイルを再帰的に含めるように syntastic を構成するにはどうすればよいですか?
  2. 複数のプロジェクトでこれをどのように行いますか? 作業中のプロジェクトを切り替えるたびに .vimrc を編集するのは正しくないように思えます。もっと良い方法があるに違いないと私は信じています。

編集:

私の .vimrc には、次のオプションがシンタスティックに存在することについては触れていませんでした:

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
4

2 に答える 2

36

プロジェクト ルート ディレクトリ内のプロジェクトごとにヘッダー ファイルを検索するすべてのディレクトリをファイルに含めることができます.syntastic_cpp_config。これを行うための形式は-I、コンパイラにディレクティブを提供する場合と同じです。

あなたの場合、それは次のことを意味します:

  • .syntastic_cpp_configの下にファイルを作成します(コードがあり、ディレクトリ階層で と同じ深さレベルにあるsourcesと仮定します)。sourceslibs
  • 次の行を入れます。

    -Ilibs/dir1

    -Ilibs/dir2

    -Ilibs/dir2/dir3

  • フラグは 1 行に 1 つずつあることに注意してください。

  • こうすれば、すべてのインクルード ディレクトリを.vimrc.

プロジェクトごとにこのカスタム構成を保持するために、.vimrcグローバル変数g:syntastic_cpp_config_fileで指定された別のファイルを持つことができます。

let g:syntastic_cpp_config_file = '.my_custom_include_file_for_syntastic'

Syntastic は、このファイルが見つかるまで各ソース ディレクトリ以降をチェックし、それを使用して出力を生成します。

詳細については、Syntastic wiki ページ古いリンクを参照してください。

于 2013-10-02T18:14:48.800 に答える