Повторная обработка ASTUnit с относительными путями включения заголовка завершается неудачно

Я использую libclang's LibTooling получить данные о завершении кода из исходных файлов C++. ASTUnits генерируются из файла compile_commands.json, созданного с помощью CMake с Ninja как генератор.

В командах вызова компилятора есть относительные пути включения заголовка (такие как -Ifoo -I../bar).

Чтобы успешно создать clang::ASTUnit Мне нужно установить clang::FileManager::FileSystemOptions::WorkingDir научить лягушку о том, как канонизировать относительные пути.

Проблема в том, что при звонке clang::ASTUnit::Reparse() на моих ASTUnits, это значение отбрасывается и мой clang::DiagnosticConsumer затем сообщает об отсутствующих заголовочных файлах.

Как обходной путь, я восстанавливаю ASTUnits с нуля вместо того, чтобы перепартировать их при изменении источников.


Вопросы:

Q1: Это нормальное поведение? Для меня это важно Reparse бесполезный.
Q2: Как успешно обработать ASTUnit с относительными путями заголовка?

1 ответ

Решение

Продолжение: используя Clang / LLVM 4.0.0, невозможно повторно проанализировать ASTUnit, вызов компилятора которого содержит относительные пути включения.

Однако, начиная с 5.0.0, clang::ASTUnit::Reparse содержит третий аргумент, который позволяет передать clang::vfs::FileSystem объект, который может решить эту проблему.

Другие вопросы по тегам