Я пишу автономный инструмент, основанный на LibTooling с RecursiveASTVistor, и я не хочу просматривать содержимое файлов заголовков, хранящихся в исходном коде. Нужно ли менять базу данных компиляции? Я использовал этот небольшой взлом, чтобы предотвратить сбои моего инструмента, но я не хочу, чтобы мой инструмент анализировал какие-либо заголовочные файлы, вообще включенные в исходный код, с которым я имею дело.
bool VisitDecl(Decl *D) {
FullSourceLoc FullLocation = Context->getFullLoc(D->getLocStart());
const auto &SourceManager = Context->getSourceManager();
if (FullLocation.isValid() && !SourceManager.isInSystemHeader(FullLocation) && Context->getSourceManager().isInMainFile(D->getLocation()))
}
То, что вы делаете, это способ пропустить системные заголовочные файлы.
Но если вы хотите пропустить все включенные заголовки, вы можете указать свой каталог включения с помощью --isystem=<custom include dirs>
вместо просто -I <custom include dirs>
опция командной строки. С этим изменением все пользовательские заголовки включения будут считаться системными заголовками и будут пропущены.
Других решений пока нет …