使用libclang解析多个文件时是否可以共享工作?
如果我在一个大型项目中有多个文件,所有这些文件都共享大量包含的头文件,那么有没有办法共享解析头文件的工作?我曾希望创建一个索引,然后向其中添加多个translationUnits,这样就可以共享一些工作,但即使是按照(伪代码)编写的代码 似乎每次调用parseTranslationUnit都要花费全部时间,性能不比使用libclang解析多个文件时是否可以共享工作?,libclang,Libclang,如果我在一个大型项目中有多个文件,所有这些文件都共享大量包含的头文件,那么有没有办法共享解析头文件的工作?我曾希望创建一个索引,然后向其中添加多个translationUnits,这样就可以共享一些工作,但即使是按照(伪代码)编写的代码 似乎每次调用parseTranslationUnit都要花费全部时间,性能不比 index1 = clang_createIndex(); clang_parseTranslationUnit(index1, "myfile"); index2 = clang_
index1 = clang_createIndex();
clang_parseTranslationUnit(index1, "myfile");
index2 = clang_createIndex();
clang_parseTranslationUnit(index2, "myfile");
我知道有专门的功能来重新分析完全相同的文件;然而,我真正想要的是,解析“myfile1”和“myfile2”可以共享解析“myheader.h”的工作,而重新解析特定函数在这方面没有帮助
作为一个子问题,重用索引和为每个翻译单元创建新索引之间是否有任何有意义的区别?一种方法是从项目中的共享头创建预编译头(PCH文件) 沿着这些思路的一些东西似乎是有效的(您可以看到整个示例):
auto-Idx=clang_createIndex(0,0);
cxtranslationunittu;
定时器t;
{
char const*args[]={“-xc++”,“foo.hxx”};
int-nargs=2;
t、 重置();
TU=clang_parseTranslationUnit(Idx,0,args,nargs,0,0,CXTranslationUnit_用于序列化);
由于某种原因,我得到了相反的结果,类似的源代码:
index1 = clang_createIndex();
clang_parseTranslationUnit(index1, "myfile");
index2 = clang_createIndex();
clang_parseTranslationUnit(index2, "myfile");
PCH parse time: 5.35074
0 diagnostics
foo1.cxx parse time: 0.158232
0 diagnostics
foo2.cxx parse time: 0.143654
0 diagnostics