如何解决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 举报,一经查实,本站将立刻删除。