如何在多个模块rebar3中包含.hrl文件

时间:2017-11-10 07:51:40

标签: erlang rebar rebar3 relx

我有几个模块的目录。对于每个模块,我有include(包含*.hrl个文件)和src(包含*.erl个文件)文件夹。如何将*.hrl文件从模块共享到另一个模块而不重复它们?

使用螺纹钢,我添加{erl_opts, [{i, "folderContainsIncludeFile"}]}并且它有效。

但是使用rebar3,编译失败的说法找不到包含文件“include / xx.hrl”

1 个答案:

答案 0 :(得分:2)

我接受它然后你没有一个伞状项目,你只有同一级别的多个目录,每个目录都有自己用rebar3管理的项目。 类似的东西:

root_folder
 |- project1
 |  |- src
 |  |- include
 |  |  `- one.hrl
 |  `- rebar.config
 |- project2
 |  |- src
 |  |  `- two.erl
 |  |- include
 |  `- rebar.config
 …

您希望将one.hrl加入two.erl

如果是这种情况,您应该考虑其中一种选择:

一个。转向伞形项目结构,如...

root_folder
 |- rebar.config <<<<<<<< notice this file is here now
 `- apps
    |- project1
    |  |- src
    |  `- include
    |     `- one.hrl
    |- project2
    |  |- src
    |  |  `- two.erl
    |  `- include
    …

B中。为每个项目使用单个存储库并将它们配置为彼此的依赖关系。结构类似于您当前的结构,但现在您必须将deps添加到rebar.config&#39; s。例如,在我们的示例中,您应该将以下行添加到project2&quot;的rebar.config:

{deps, [project1]}.

(如果你设法以hex.pm发布project1)

℃。正确设置$ERL_LIBS,使其包含使用rebar3构建应用程序的路径。有点像...

ERL_LIBS=$ERL_LIBS:/path/to/root_folder/project1/_build/lib:/path/to/root_folder/project2/_build/lib:…

希望这会有所帮助:)