【问题标题】:convert c++ header file to protobuf .proto file将 c++ 头文件转换为 protobuf .proto 文件
【发布时间】:2014-11-05 11:53:42
【问题描述】:

我想知道,有没有什么工具可以用来将 .h 文件转换为 c++ 的 .proto 文件? 我想要做的是:我有几个结构到一个 .h 文件中,我想序列化它们并通过 protbuf 发送它们。为此,我需要一个 .proto 文件来生成 .pb.h 和 .pb.cc 文件,然后我将能够序列化结构并发送它们。

有人知道有没有这样的工具?我可以手动完成,但我会花很多时间,因为头文件包含许多结构。

谢谢!

我正在编辑我的问题,让您知道我没有找到我想要的东西,但我发现这个https://code.google.com/p/protobuf-csharp-port/wiki/ProtoGen 工具也很有帮助。您将 .proto 文件作为参数提供,它会生成 c# 代码。希望对您有所帮助!

【问题讨论】:

  • github.com/protobuf-c/protobuf-c 这可能会有所帮助!
  • 你需要反过来。创建一个 proto 文件并使用 protoc 构建 C++ 结构。
  • 是的,这就是我想做的。构建 .proto 文件并使用 protoc 构建 c++ 结构。但是我已经在头文件中有结构,我想知道是否有任何方法可以将此文件转换为 .proto 文件,以便我可以从 protobuf 中获得正确的 c++ 结构。
  • @Blackhat002 感谢您的回复。然而,protobuf-c 只做 protoc 做的事情。在你给它一个 .proto 文件后,它会生成 .pb.h 和 .pb.cc :)
  • 我听说 LLVM 可以解析 C++ 语法并嵌入到编译器中,LLVM 有帮助吗?

标签: c++ protocol-buffers


【解决方案1】:

您可以编写一个使用libclang Python 绑定的脚本。

首先,使用 CMake 为您的项目生成一个compile_commands.json。为您感兴趣的代码解析完整的编译器命令行。

其次,将编译命令行从 Python 脚本传递给 libclang,以解析包含您感兴趣的标头的编译单元。

第三,迭代 AST 并提取您感兴趣的结构。

第四,从孤立的 AST 子树生成 protobuf。

这只是一个草图,但我做了类似的事情来递归查找编译单元中包含的所有头文件。

【讨论】:

    猜你喜欢
    • 2021-12-30
    • 2017-01-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多