【发布时间】: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