我正在尝试使用.pch,如以下示例所示http://clang.llvm.org/doxygen/group__CINDEX.html,但它似乎不起作用。
char * args [] = {“ - Xclang”,“ - include-pch = IndexTest.pch”};
TU = clang_createTranslationUnitFromSourceFile(Idx,“IndexTest.c”,2,args,0,0);
libclang无法读取-include-pch标志,它将其读作-include标志。
我想要的是以下内容: 我的代码取决于很多标题。我想解析并创建一次翻译单元并将其另存为pch文件。 现在我只想解析一个有问题的文件。有可能吗?
答案 0 :(得分: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文件,则必须使用“两个”参数:
llvm::SmallVector<const char *, 128> Args;
//...
Args.push_back("-include-pch");
Args.push_back("myfile.h.pch");
//...
答案 1 :(得分:0)
像这样使用:
char *args[] = { "-Xclang", "-include-pch", "IndexTest.pch" };
这将解决您的问题。但是,当你想使用多个pch时,会出现一个更大的问题...即使使用clang ++编译器也无法正常工作。
答案 2 :(得分:0)
在clang's documentation中,您可以找到源代码示例:
// 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的my question。