web-dev-qa-db-ja.com

Syntasticのヘッダーファイルを再帰的にインクルードする

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

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

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

g:syntastic_cpp_include_dirs = ['libs /']

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

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

g:syntastic_cpp_include_dirs = ['libs/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
18
dev_nut

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

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

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

    -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ページ古いリンク を参照してください。

32
vvnraman

私は少し運が良かったのと同じ質問をしました。ただし、引用符スタイルのヘッダーインクルードを使用すると、構文によってフォルダーが適切にチェックされ、警告が発行されないことがわかりました。たとえば、foo2.cppで作業している場合、

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

標準ライブラリとvimにハードコーディングしたいライブラリ用の保存ブラケットが含まれています。

0
Kevin