clang (libclang) производительность блока перевода / разбора - PullRequest
7 голосов
/ 10 ноября 2011

У меня есть вопрос о производительности разбора при использовании clang (libclang) и конкретной функции clang_parseTranslationUnit и clang_reparseTranslationUnit.

Я пытаюсь оптимизировать процесс, но у меня уже нет идей. Ситуация следующая - у меня есть источник .cpp, который включает в себя много заголовочных файлов. Эти заголовки меняются очень редко. Однако исходный код .cpp сильно меняется, и мне нужно часто его анализировать. Таким образом, есть возможность «подготовить / прекомпилировать» все заголовки и создать файл .pch, а затем использовать его при разборе .cpp. Однако проблема в том, что я могу использовать только один .pch. Итак, мне нужно создать .pch из всех включенных заголовков. Однако позже, когда я включаю какой-нибудь другой файл заголовка, мне нужно повторно проанализировать все заголовки, даже если они не изменились вообще. Кроме того, это проблема, в которой я должен четко знать, какие заголовки включены в .cpp (это не очень удобно, так как это означало бы, что я должен хотя бы самостоятельно сканировать включения, а затем создать .pch, а затем используйте его при разборе источника .cpp).

Есть ли другой способ оптимизировать процесс? Я надеялся, что, когда я использую clang_parseTranslationUnit и позже clang_reparseTranslationUnit, синтаксический анализ будет оптимизирован таким образом на самом деле (по крайней мере, все заголовки, которые не были изменены, не нужно повторно анализировать). Но это так не работает.

...