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

how to include .hrl files across multiple modules rebar3

我有几个模块的目录。对于每个模块,我将 include(包含 *.hrl 文件)和 src(包含 *.erl 文件)文件夹分开。如何在不复制文件的情况下将 *.hrl 文件从一个模块共享到另一个模块?

对于钢筋,我添加了 {erl_opts, [{i, "folderContainsIncludeFile"}]} 并且成功了。

但是对于rebar3,编译失败,提示找不到包含文件"include/xx.hrl"

我认为你没有伞式项目,你只有多个目录处于同一级别,每个目录都有自己的项目,由 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
    …

乙。为每个项目使用单独的 repos,并将它们配置为相互依赖。该结构与您当前的结构类似,但现在您必须将 deps 添加到 rebar.config。例如,在我们的示例中,您应该将以下行添加到项目 2 的 rebar.config:

{deps, [project1]}.

(如果您设法在 hex.pm 中发布项目 1)

C。正确设置 $ERL_LIBS,使其包含使用 rebar3 构建应用程序的路径。像……

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

希望这对您有所帮助:)