我有几个模块的目录。对于每个模块,我有include
(包含*.hrl
个文件)和src
(包含*.erl
个文件)文件夹。如何将*.hrl
文件从模块共享到另一个模块而不重复它们?
使用螺纹钢,我添加{erl_opts, [{i, "folderContainsIncludeFile"}]}
并且它有效。
但是使用rebar3,编译失败的说法找不到包含文件“include / xx.hrl”
答案 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:…
希望这会有所帮助:)