BEAM 文件是否记得它是否是使用 -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,...
 {my_key,my_value}] 

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

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

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