【问题标题】:How can I parse C++ code in a prebuild event?如何在预构建事件中解析 C++ 代码?
【发布时间】:2020-03-19 04:06:30
【问题描述】:

我的 C++ 工具链中有一个预构建事件工具(用 Ruby 编写),它可以从现有 C++ 源代码生成额外的 C++ 代码。我想用更快的生成器替换这个工具,使用 clang 是最好的选择。

有没有办法编写一个解析文件的 C++ 源代码的 C++ 应用程序,以便我可以在 Clang 中实现这个预构建工具?我正在寻找如何开始的关键字或页面。非常感谢任何帮助!

【问题讨论】:

  • 你在寻找类似“Clang AST”的东西吗?
  • 差不多,我正在寻找 AST 但宏尚未解析
  • 有没有办法编写一个解析文件的 C++ 源代码的 C++ 应用程序 是的。该工具称为“C++ 编译器”。对不起,我无法抗拒。当然,在 Ruby 中完成的任何事情也可以在 C++ 中完成。请详细描述您要如何解析 C++ 代码。一个简单的模式匹配(带有替换)是一种情况,但一个完整的 C++ 解析是(非常)其他的。
  • 关于宏:您可以在仅预处理器模式下运行编译器。 (在 gcc/clang 中,它是命令行选项 -E。)这将为 C++ 代码提供所有宏替换。 (不要对文件大小感到惊讶。所有#includes 也将得到解决。)

标签: c++ clang pre-build-event prebuild


【解决方案1】:

解析 C++ 并不是一件简单的事情。编译时的诡计和隐含的语义使它变得异常困难。因此,我建议使用 Clang。它的开发人员使得将 Clang 用作库成为可能。查看此guide 以查看 Clang 具有的不同接口。如果您想要真正的 C++ 体验,您可能需要选择LibTooling

我想警告您,为了让任何 C/C++ 解析器按预期工作,它们绝对需要真正编译器使用的编译选项。如果没有包含目录或宏定义,代码几乎没有意义。基本上,您的构建系统应该告诉您的自定义工具如何编译每个文件。最简单的方法是使用compilation database。它是许多基于 Clang 的工具的首选解决方案。但是,看起来您正在将其作为构建系统的一部分,因此也许合并您的工具并直接使用构建系统中的选项对您来说并不是一个负担。

希望这些信息对您有所帮助!

【讨论】:

  • 谢谢!这就是我需要的!
  • 我很乐意提供帮助!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-10-14
  • 1970-01-01
  • 2022-11-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-17
相关资源
最近更新 更多