重新解析具有相对 header 的 ASTUnit 包含路径失败
Reparse an ASTUnit with relative header include paths fails
我正在使用 libclang 的 LibTooling
从 C++ 源文件中获取代码完成数据。
ASTUnit 是从通过 CMake
创建的 compile_commands.json 文件生成的,使用 Ninja
作为生成器。
在编译调用命令中,有相对的header包含路径(如-Ifoo -I../bar
)。
成功生成 clang::ASTUnit
, I need to set clang::FileManager::FileSystemOptions::WorkingDir
以指示 clang 如何规范化相对路径。
Problem is, when calling clang::ASTUnit::Reparse()
on my ASTUnits, this value is
discarded and my clang::DiagnosticConsumer
then reports missing header files.
作为解决方法,我从头开始重新生成 ASTUnit,而不是在源更改时重新解析它们。
问题:
Q1:
这是正常行为吗?对我来说,它本质上使 Reparse
变得毫无用处。
Q2:
如何成功地重新解析具有相对 header 包含路径的 ASTUnit?
后续:使用Clang/LLVM 4.0.0,无法重新解析编译器调用的ASTUnit包含相对包含路径。
然而从5.0.0开始,clang::ASTUnit::Reparse
contains a third argument that allows to pass a clang::vfs::FileSystem
对象可以解决这个问题。
我正在使用 libclang 的 LibTooling
从 C++ 源文件中获取代码完成数据。
ASTUnit 是从通过 CMake
创建的 compile_commands.json 文件生成的,使用 Ninja
作为生成器。
在编译调用命令中,有相对的header包含路径(如-Ifoo -I../bar
)。
成功生成 clang::ASTUnit
, I need to set clang::FileManager::FileSystemOptions::WorkingDir
以指示 clang 如何规范化相对路径。
Problem is, when calling
clang::ASTUnit::Reparse()
on my ASTUnits, this value is discarded and myclang::DiagnosticConsumer
then reports missing header files.
作为解决方法,我从头开始重新生成 ASTUnit,而不是在源更改时重新解析它们。
问题:
Q1:
这是正常行为吗?对我来说,它本质上使 Reparse
变得毫无用处。
Q2:
如何成功地重新解析具有相对 header 包含路径的 ASTUnit?
后续:使用Clang/LLVM 4.0.0,无法重新解析编译器调用的ASTUnit包含相对包含路径。
然而从5.0.0开始,clang::ASTUnit::Reparse
contains a third argument that allows to pass a clang::vfs::FileSystem
对象可以解决这个问题。