使用相对标头重新解析ASTUnit包含路径失败

时间:2017-06-15 08:56:51

标签: c++ clang libclang libtooling

我使用libclang' s LibTooling从C ++源文件中获取代码完成数据。 ASTUnits是通过CMake创建的 compile_commands.json 文件生成的,其中Ninja为生成器。

在编译器调用命令中,有相对头包含路径(例如-Ifoo -I../bar)。

要成功生成clang::ASTUnit,我需要设置clang::FileManager::FileSystemOptions::WorkingDir以指示如何规范相对路径。

  

问题是,在我的ASTUnits上调用clang::ASTUnit::Reparse()时,此值为   丢弃后,我的clang::DiagnosticConsumer会报告丢失的头文件。

作为一种解决方法,我从头开始重新生成ASTUnits,而不是在源更改时重新解析它们。

问题:

Q1: 这是正常行为吗?对我来说,它使Reparse变得毫无用处 Q2: 如何使用相对标头包含路径成功重新解析ASTUnit?

1 个答案:

答案 0 :(得分:0)

后续行动:使用 Clang / LLVM 4.0.0 ,无法重新分析编译器调用包含相对包含路径的ASTUnit。

从5.0.0开始,clang::ASTUnit::Reparse包含第三个参数,允许传递可以解决此问题的clang::vfs::FileSystem对象。