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 文件,则必须使用“两个”参数:

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" };

这将解决您的问题。但是,有一个更大的问题,当你想使用多个 pchs 时......它不起作用,即使使用 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 回答