libclang:如何区分项目和系统包含? 我使用LILCLANG(Python BIDENS)解析一些C++代码。 我需要区分解析为系统头的包含(例如,#include),以及解析为项目本地头的包含(例如,#include“my_header.h”)

libclang:如何区分项目和系统包含? 我使用LILCLANG(Python BIDENS)解析一些C++代码。 我需要区分解析为系统头的包含(例如,#include),以及解析为项目本地头的包含(例如,#include“my_header.h”),c++,libclang,C++,Libclang,问题是我无法找到从libclang AST检索此信息的方法 一些想法/考虑: 由于使用-E(仅运行预处理器)运行clang,因此信息必须存在于某个位置,系统包含通过在包含时附加标志3来标记。示例: #1”/usr/bin//lib/gcc/x86_64-linux-gnu/9/../../../../../../include/c++/9/exception“13 当然,我可以自己调用预处理器并匹配结果,但这会增加开销和更多潜在的bug源 只需在include语句的标记中查找vs“”,它们就不

问题是我无法找到从libclang AST检索此信息的方法

一些想法/考虑:

  • 由于使用
    -E
    (仅运行预处理器)运行clang,因此信息必须存在于某个位置,系统包含通过在包含时附加标志
    3
    来标记。示例:
    #1”/usr/bin//lib/gcc/x86_64-linux-gnu/9/../../../../../../include/c++/9/exception“13
  • 当然,我可以自己调用预处理器并匹配结果,但这会增加开销和更多潜在的bug源
  • 只需在include语句的标记中查找
    vs
    ”,它们就不起作用,因为它们只是确定查找顺序
  • 检查诸如
    /usr/lib/..
    之类的扩展包含文件路径的开头不起作用,因为它不是独立于平台的,用户可以通过
    -issystem
    添加自定义“系统”目录

我希望您能在这方面帮助我:)

为什么您需要区分项目和系统包含?高度简化,我需要递归地遍历项目包含,但系统包含没有帮助?@n.“代词是m。从第一眼看,我想这可以解决我的问题,但Python绑定中没有公开此函数:(那么,添加它,然后提交一个补丁…为什么需要区分project和system includes?经过大量简化,我需要递归地遍历project includes,但不是system includes是否有帮助?@n.“代词m。从第一眼看,我想这会解决我的问题,但Python绑定中没有公开此函数:(那么,添加它,然后提交一个补丁。。。