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

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

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



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

问题:

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

最佳答案

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

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

08-28 16:36