Как повысить производительность парсинга clang с помощью PCH или PTH?

Я использую Clang C API для разбора и получения диагностики. Я заметил, что все время использую один и тот же набор заголовков, поэтому решил попробовать использовать PCH или PTH для повышения производительности.

Но я получаю диагностику, что ни PCH, ни PTH не использовались во время clang_parseTranslationUnit:

  • аргумент не используется во время компиляции: '-emit-pth'
  • /tmp/system/include/libcxx/iostream.pth: ввод «линкер» не используется
  • аргумент не используется во время компиляции: '-emit-pch'
  • /tmp/system/include/libcxx/iostream.pch: ввод «линкер» не используется

Я удивлен, что PCH и PTH не использовались при синтаксическом анализе, так как же я могу использовать PCH или PTH или любой другой подход для повышения производительности синтаксического анализа?

PS.

PTH был сгенерирован с использованием clang++ -x c++-header iostream -emit-pth -o iostream.pth, PCH аналогичным образом

Обновление 1:

Я нашел пример использования PCH:

// 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);

Проблема в том, что теперь я получаю еще одно предупреждение диагностики:

'-pch=/system/include/libcxx/iostream.pch' file not found

Похоже, аргументы командной строки были проанализированы неправильно. Что я делаю неправильно?


person 4ntoine    schedule 09.11.2014    source источник
comment
у меня тоже не работает   -  person exebook    schedule 17.02.2016


Ответы (1)


Нужно включать -Xclang перед каждым аргументом:

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

См. https://reviews.llvm.org/diffusion/L/browse/cfe/trunk/test/Index/c-index-pch.c для вдохновения.

person amc    schedule 29.05.2017