【发布时间】:2025-11-27 08:45:01
【问题描述】:
我正在尝试为 clang 或 gcc 编写一个插件来解释自定义 [[cxx11::attributes]] 并基于此生成一些代码。
从 4.5 版开始,gcc 支持几乎每个编译步骤都可以挂接的插件。但是,我认为 gcc 不太清楚如何修改其 AST 并通过它导航(至少我在尝试时遇到了麻烦......)。
然后我记得 clang 被设计为扩展并用作库,我试了一下。在挖掘之后,我发现一些主题说 clang 不支持自定义属性。我哭了。
我的主要目标是根据用户可以在代码中使用的任何类型的注释生成代码。我想使用 c++11 属性,因为它们非常清晰。编译指示也是一种选择,但它们有一些限制。
以下是问题:
1) 真的(目前)不可能在 clang 中拥有自定义属性吗? 2)学习gcc内部的最好方法是什么? (我阅读了很多页的文档,但他们仍然没有说出我想要的) 3) gcc 是否有一些转储功能来像 clang 一样打印它的 AST?探索它的树会有很大帮助。
谢谢!任何信息/提示将不胜感激!
【问题讨论】:
-
clang 中的自定义属性只需要您自己修改clang。这不是很困难,但文档很少。 Here's a tutorial
-
我已经阅读了该文档,但我有点失望......普通用户必须下载自定义的 clang 才能使用我的插件,这不是重点。
-
您想到了哪些附加注释?干什么用的?
-
我在考虑序列化的东西。就像标记将被序列化的类的字段(可选或强制)。记录信息,将对象写入数据库。自动将包装器写入python等。我有很多想法,我什至不知道从哪里开始哈哈。但在此之前,我需要操纵 AST。我需要先解决这个问题。简而言之,我想为通常的样板代码创建一个快捷方式。
-
@MasterId:有趣的目标。你最好编辑你的问题告诉他们。