如何使用类似于gcc-xml的clang生成元数据输出?

时间:2012-02-27 10:34:50

标签: c++ gcc metadata clang

我发现GCCXML不再被维护(我认为最后一个版本来自他们的CVS存储库2009)。人们通常建议查看clang,但我找不到描述如何生成类似输出的综合文档。不一定是XML,而是可解析(有文档,如果是二进制或模糊)格式的相同信息。如果有办法从最近的gcc版本中获取相同的信息,那也没关系。

这是一个用于动态调用C ++代码的业余爱好项目。我知道类似的项目(pygccxml,xrtti,openc ++),但重点是制作它,为了好玩。

3 个答案:

答案 0 :(得分:3)

以前有一种方法可以使用Clang打印xml转储,但它或多或少受到支持并已被删除。有开发人员选择在不同阶段获得转储,但格式是供人类使用,而且不稳定。

对Clang用户的建议一直是代码集成:

  • 直接使用C ++中的Clang,例如使用RecursiveASTVisitor实现
  • 或者使用C或C ++中的libclang

与gcc不同,clang被设想为一组要重用的库 ,因此尝试为某些clang输出编写解析器没有多大意义:它只是更多的错误 - 而不仅仅是在源头上消费信息。

答案 1 :(得分:1)

您可以使用基于Clang的CastXML生成XML文件。

https://github.com/CastXML/CastXML

答案 2 :(得分:0)

你可以编写一个GCC插件,或者更好的是MELT扩展名来编写代码。你需要一个GCC 4.6或更高版本(4.7即将发布)。

然而,扩展GCC,无论是通过C编码的插件还是更好的扩展编码在MELT(适用于扩展GCC的域特定语言)中的扩展都需要一些时间,因为您需要了解并处理大部分主要的GCC内部表示(Gimple和Tree-s)。

如果您想使用MELT,我很乐意为您提供帮助。