Erlang:多个应用程序中*.hrl文件的位置

Erlang:多个应用程序中*.hrl文件的位置,erlang,records,Erlang,Records,我正在开发一系列相关的应用程序,这些应用程序最终将集成到单个版本中。几个应用程序共享相同的记录结构 我应该: a) 是否复制每个应用程序的include目录中定义记录结构的*.hrl文件? b) 在我的应用程序树中的其他地方放一个文件——如果是,放在哪里 这是我当前的树: zpt$ apps app1 ebin include myrecords.hrl priv src

我正在开发一系列相关的应用程序,这些应用程序最终将集成到单个版本中。几个应用程序共享相同的记录结构

我应该:

a) 是否复制每个应用程序的include目录中定义记录结构的*.hrl文件? b) 在我的应用程序树中的其他地方放一个文件——如果是,放在哪里

这是我当前的树:

zpt$
   apps
       app1
          ebin
          include
             myrecords.hrl
          priv
          src
       app2
          ebin
          include
             myrecords.hrl
          priv
          src
       etc
非常感谢,


LRP

我尝试的一种方法是创建一个应用程序,它不做任何事情,但包含多个项目通用的记录定义。然后我使用钢筋将其作为依赖项包含。当包含hrl文件时,我使用
include_lib
语法。该语法允许您包含来自另一个应用程序的hrl文件

app
    ebin
    include
    priv
    src
        some_src.erl
    deps
        common_hrl_app
            include
                common_records.hrl
            src
            ebin
        other_dep_app
            src
                other_src.erl
            .
            .
            .
include_lib
可能出现在某些_src.erl或其他_src.erl中的示例:

-include_lib("common_hrl_app/include/common_records.hrl").
我喜欢这种方法,因为:

  • 它与钢筋依赖系统配合得很好
  • 它允许我在版本控制中的一个位置跟踪HRL
  • 我可以对这个应用程序进行版本设置,如果我希望一个新的应用程序与另一个使用相同记录的应用程序兼容,那么我就可以获取特定的版本

  • 回答评论中的问题:

    我在ebin目录中有一个骨架应用程序文件,它指定了应用程序的名称和版本,以便钢筋可以验证版本。这里有一个例子

    {application,common_hrl_app,
             [{description,[]},
              {vsn,"1"},
              {registered,[]},
              {applications,[kernel,stdlib]},
              {env,[]},
              {modules,[]}]}.
    

    有了钢筋,您就有了顶级应用程序,可以将多个应用程序作为依赖项。当rebar获取这些依赖项时,它会将它们放在deps目录中。如果这些应用程序中有任何一个有自己的依赖项,那么这些依赖项也会被提取到deps目录,依此类推。deps目录没有无限嵌套的层次结构。

    这看起来是一个很酷的解决方案。但有几件事我还不清楚,也许是因为我对力霸还有点不确定:1)在common_hrl_应用程序中,除了include目录之外,其他目录都是空的吗?2) deps子树是否包含在我树中的所有其他应用程序中?对答案进行了澄清。