Повторная обработка 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
объект, который может решить эту проблему.