【问题标题】:Reparse an ASTUnit with relative header include paths fails使用相对标头包含路径重新解析 ASTUnit 失败
【发布时间】:2017-06-15 08:56:50
【问题描述】:

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

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

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

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

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


问题:

Q1: 这是正常行为吗?对我来说,它本质上使 Reparse 无用。
Q2: 如何成功地重新解析具有相关标头包含路径的 ASTUnit?

【问题讨论】:

    标签: c++ clang libclang libtooling


    【解决方案1】:

    跟进:使用 Clang/LLVM 4.0.0,无法重新解析编译器调用包含相对包含路径的 ASTUnit。

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

    【讨论】:

      猜你喜欢
      • 2016-10-27
      • 2019-02-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多