1

http://clang.llvm.org/doxygen/group__CINDEX.htmlの次の例に示されているように、.pch を使用しようとしていますが、機能していないようです。

char *args[] = { "-Xclang", "-include-pch=IndexTest.pch" };

TU = clang_createTranslationUnitFromSourceFile(Idx, "IndexTest.c", 2, args, 0, 0);

libclang は -include-pch フラグの読み取りに失敗し、-include フラグとして読み取っています。

私が欲しいのは次のとおりです。私のコードは多くのヘッダーに依存しています。一度翻訳単位を解析して作成し、pchファイルとして保存したいです。ここで、問題の単一のファイルに対して解析が行われるようにしたいだけです。することは可能ですか?

4

3 に答える 3

1

同様の問題が発生しました。おそらく解決策も同様です:

内部でいくつかのコードをコンパイルするために clang を使用しており、コンパイラに送信される引数を含むベクトルを使用しています。

llvm::SmallVector<const char *, 128> Args;
Args.push_back("some");
Args.push_back("flags");
Args.push_back("and");
Args.push_back("options");
//...

「Args.push_back("-include-pch myfile.h.pch");」のような行を追加します。-include-pch フラグが -include フラグとして読み取られるため、エラーが発生します。

この場合、pch ファイルを使用する場合は、「2 つの」引数を使用する必要があります。

llvm::SmallVector<const char *, 128> Args;
//...
Args.push_back("-include-pch");
Args.push_back("myfile.h.pch");
//...
于 2011-06-12T17:32:20.777 に答える
0

次のように使用します。

char *args[] = { "-Xclang", "-include-pch", "IndexTest.pch" };

これはあなたの問題を解決します。ただし、複数のpchを使用する場合は、さらに大きな問題があります...clang++コンパイラを使用しても機能しません。

于 2011-11-09T15:52:23.210 に答える
0

clang のドキュメントでは、ソース コードの例を見つけることができます。

// excludeDeclsFromPCH = 1, displayDiagnostics=1
Idx = clang_createIndex(1, 1);

// IndexTest.pch was produced with the following command:
// "clang -x c IndexTest.h -emit-ast -o IndexTest.pch"
TU = clang_createTranslationUnit(Idx, "IndexTest.pch");

// This will load all the symbols from 'IndexTest.pch'
clang_visitChildren(clang_getTranslationUnitCursor(TU), TranslationUnitVisitor, 0);
clang_disposeTranslationUnit(TU);

// This will load all the symbols from 'IndexTest.c', excluding symbols
// from 'IndexTest.pch'.
char *args[] = { "-Xclang", "-include-pch=IndexTest.pch" };
TU = clang_createTranslationUnitFromSourceFile(Idx, "IndexTest.c", 2, args, 0, 0);
clang_visitChildren(clang_getTranslationUnitCursor(TU), TranslationUnitVisitor, 0);
clang_disposeTranslationUnit(TU);

チェックしてないのに。実用的な解決策は見つかりましたか?PCH に関する私の質問もチェックしてください。

于 2014-11-10T19:30:05.600 に答える