私はテキスト エディター (ほぼ IDE) に取り組んでおり、舞台裏 (トークン化、診断) で llvm/clang を使用しています。編集されるほぼすべてのファイルには、他のヘッダー (含まれるファイルのツリー) を含むいくつかのヘッダーも含まれるメイン ヘッダー ファイルが含まれます。
UserFile.h
L----MainHeader.h
L----string.h
L----device.h
| L----(in some conditions)---concreteDevice.h
L----math.h
|
...
主なアイデアは、「UserFile.cpp」の編集中clang_parseTranslationUnitおよびclang_reparseTranslationUnit呼び出し中に同じままであるヘッダーの再解析をスキップすることです。
Clang のチェーン化されたプリコンパイル済みヘッダーや、必要と思われるモジュールについて読んだことがあります。
PCH for MainHeader.hlikeclang++ -x c++-header MainHeader.h -emit-pch -o MainHeader.h.pchを生成し、 like として使用しましたclang++ -include-pch MainHeader.h.pch ...。ヘッダーツリー全体(連鎖)のPCHなのか、そのファイルのみのPCHなのか(ほとんどの場合)はわかりません。
CXTranslationUnit_PrecompiledPreambleclang オプションがあるため、チェーンされたプリコンパイル済みヘッダーが必要ですか?
チェーンされたプリコンパイル済みヘッダーを生成するにはどうすればよいですか?
ヘッダー ツリーは複数あるためかなり複雑であり#ifdef SOME_CONDITION .. #include <SomeHeader.h> #endif、ツリー全体を理解して各ヘッダー ファイルを手動でプリコンパイルするのはかなり困難です (ただし、インクルージョン ツリーに影響を与えるPCH引数を渡すことは知っています)。-DSOME_CONDITION