问题描述
我正在开发一个处理 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}]}]}}
意思是,您可以轻松地用一些元信息“标记”您的光束文件。因此,一种解决方法可能是用此标记标记这些光束文件。