我的结构类似于以下内容:
rebar.config
deps/
apps/A/rebar.config
我的顶级rebar.config
文件如下所示:
{sub_dirs, ["apps/A"]}.
{lib_dirs, ["deps"]}.
A/rebar.config
如下所示:
{deps, [
%% deps
]}.
{erl_opts, [debug_info, warn_missing_spec, warnings_as_errors]}.
现在,我的一个依赖项没有为其所有函数提供-spec
,因此warnings_as_errors
会导致编译失败。
我希望erl_opts
只影响我的代码,并且依赖项有自己的选项。为什么rebar
会这样做?
答案 0 :(得分:2)
事实证明我的一个依赖项没有rebar.config
,所以rebar正在使用我的选项编译它。
令人困惑的是erl_opts
未在顶级rebar.config
中设置,而是在本地rebar.config
文件中设置。这是具有deps
子句的文件。
在这种情况下,选项似乎是“横向”继承的。
答案 1 :(得分:1)
我无法使用以下版本的钢筋重现这一点:
rebar 2.1.0-pre R15B03 20131210_073701 git 2.1.0-pre
在我的本地设置中,使用相同的配置( goldrush 是我的依赖):
...
==> goldrush (compile)
DEBUG: Matched required ERTS version: 5.9.3.1 -> .*
DEBUG: Matched required OTP release: R15B03 -> .*
DEBUG: Min OTP version unconfigured
DEBUG: erl_opts [debug_info,warn_export_all]
...
==> myapp (compile)
DEBUG: Matched required ERTS version: 5.9.3.1 -> .*
DEBUG: Matched required OTP release: R15B03 -> .*
DEBUG: Min OTP version unconfigured
DEBUG: erl_opts [debug_info,debug_info,warn_missing_spec,warnings_as_errors]
...
如您所见,这两个应用程序会收到两组不同的选项。
你能启用调试并发布相关输出吗?
./rebar -vvv clean compile
你在运行什么版本的rebar / Erlang?