1

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

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

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

问题是,打电话时clang::ASTUnit::Reparse()我的 ASTUnits 时,这个值被丢弃,clang::DiagnosticConsumer然后我报告丢失的头文件。

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


问题:

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

4

1 回答 1

1

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

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

于 2017-06-23T09:45:33.903 回答