BEAM 文件是否记得它是否是用 -Werror 构建的?

Does a BEAM file remember whether it was built with -Werror?

我正在开发一个处理 BEAM 文件的工具,我们希望能够假设代码是使用 -Werror 编译的,因此我们不必重复 erl_lint编译器通过。

有没有办法确定 BEAM 是否使用 -Werror 构建?

我希望 beam_lib:chunks/2 能在这里提供帮助,但不幸的是它似乎没有我要找的东西:

beam_lib:chunks("sample.beam", [debug_info, attributes, compile_info]).
% the stuff returned says nothing about -Werror, even if I compile with -Werror

这个信息好像是always stripped

但是,如果您可以控制编译过程 - 您可以将其他信息放入 beam 文件中 - 可以通过 M:module_info(compile) 和 beam 块访问这些信息。

例如在钢筋中:

{erl_opts, [debug_info, {compile_info, [{my_key, my_value}]}]}.

然后:

1> my_module:module_info(compile).
[{version,"7.6.6"},
 {options,[debug_info, ...
 {my_key,my_value}] 

直接从波束块中“发现”这个密钥也是如此:

2> beam_lib:chunks("my_beam.beam", [compile_info]).
{ok, ... {my_key,my_value}]}]}}

意思是,您可以轻松地用一些元信息“标记”您的 beam 文件。因此,解决方法可能是用此标记标记这些光束文件。