微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

libclang:如何区分项目和系统包含的内容?

如何解决libclang:如何区分项目和系统包含的内容?

我正在使用libclang(Python绑定)来解析一些C ++代码。 我需要将解析为系统标头(例如#include <algorithm>)的包含项与解析为项目本地标头(例如#include "my_header.h")的包含区分开来。

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

一些想法/注意事项:

  • 信息必须放在某个地方,因为使用-E运行clang(仅运行预处理程序),所以在包含系统标记时,系统会通过在标记3后面附加标志来进行标记。示例:
    # 1 "/usr/bin/../lib/gcc/x86_64-linux-gnu/9/../../../../include/c++/9/exception" 1 3
  • 当然,我可以自己调用预处理器并匹配结果,但这会增加开销并增加错误的潜在来源
  • 仅在include语句的标记中查找<>"",因为它们只是确定查找顺序,因此不起作用。
  • 检查诸如/usr/lib/...之类的扩展包含文件路径的开头不起作用,因为它与平台无关,并且用户可以通过-isystem添加自定义“系统”目录。

希望您能在此方面为我提供帮助:)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。