【问题标题】:Where to put code generated from proto files in Erlang/OTP?将 proto 文件生成的代码放在 Erlang/OTP 中的什么位置?
【发布时间】:2012-12-03 19:07:35
【问题描述】:

这更像是在寻找一种合理的方法,而不是一个问题。我正在使用gpb*.proto 文件(Google 协议缓冲区)中生成 Erlang 绑定。我的 OTP 应用程序的结构是默认的:

/ebin
/include
/priv
/src

给定一个*.proto 文件,假设person.proto,gpb 生成person.erl,包括解码和编码消息的方法,以及保存记录定义的person.hrl,因为协议缓冲区在Erlang 中作为记录实现。这些生成的文件放置的位置可以传递给编译,但我不知道放在哪里。有一个debate 是否将生成的源代码置于版本控制之下,但我想省略它。因此,将 proto 文件存储在 src/ 中是不适用的,因为它们每次都会出现在版本控制中。 那么把它们放在哪里呢?

【问题讨论】:

  • 您好,请问您如何使用gpb?我不知道如何让它编译 .proto 文件。
  • 试试gpb_compile:file("your.proto", Options)Options 可能是[strings_as_binaries, use_packages, include_as_lib]。您可能还想尝试我为 gpb 编写的扩展,它位于它之上以便更方便的绑定:github.com/squidfunk/gpb-bindings

标签: erlang protocol-buffers


【解决方案1】:

使用允许源代码控制系统忽略它们的命名规则(如 gpb_ 前缀)将它们放在 src 目录中。

【讨论】:

    【解决方案2】:

    我肯定会把它们放在 src 目录中。然后在源代码控制系统中显式包含 .proto 文件,同时确保从源代码控制系统排除 相应的.erl。然后,您需要的只是构建工具(make、rebar、...)中的规则,以从 .proto 文件生成 .erl 文件,然后编译它们。根据源代码控制系统,您可能甚至不必删除它们(这适用于 git)。

    【讨论】:

    • 好的,包含 proto 文件并排除其余文件,听起来合法。
    • 我亲自使用leex(扫描仪生成器)和yecc(解析器生成器)生成的文件完成了这项工作。包含.xrl.yrl 文件并排除生成的.erl 文件
    猜你喜欢
    • 1970-01-01
    • 2018-07-16
    • 1970-01-01
    • 2021-12-29
    • 1970-01-01
    • 2013-12-26
    • 2011-08-18
    • 1970-01-01
    • 2010-09-16
    相关资源
    最近更新 更多