最新の LibClang を使用して、いくつかの C ヘッダー ファイルを解析しています。私が処理するコードは、CXUnsavedFile のものです (すべて動的に生成され、ディスク上には何もありません)。例えば:
FileA.h には以下が含まれます。
struct STRUCT_A {
int a;
struct STRUCT_B foo;
};
FileB.h には以下が含まれます。
struct STRUCT_B {
int b;
};
次のコード スニペットで fileA.h を解析する場合:
CXUnsavedFile unsaved_files[2];
unsaved_files[0].Filename = "fileA.h";
unsaved_files[0].Contents = fileA_contents;
unsaved_files[0].Length = strlen( fileA_contents );
unsaved_files[1].Filename = "fileB.h";
unsaved_files[1].Contents = fileB_contents;
unsaved_files[1].Length = strlen( fileB_contents );
tu = clang_parseTranslationUnit(
index,
"fileA.h",
argv, // "-x c-header -target i386-pc-win32"
argc,
(CXUnsavedFile *)&unsaved_files,
2,
CXTranslationUnit_None
);
CXCursor cur = clang_getTranslationUnitCursor( tu );
clang_visitChildren( cur, visitor, NULL );
field has incomplete type 'struct STRUCT_B'
構造体 STRUCT_B を定義するために fileB.h をインクルードしていないので、エラー " " が表示されます。
「#include <fileB.h>」を追加しても機能しません ( fatal error: 'fileB.h' file not found
)。
1 つ以上の必要な定義が別の CXUnsavedFile fileB.h に存在する場合、fileA.h の解析を機能させるにはどうすればよいですか?