1

我正在开发一个处理 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
4

1 回答 1

1

似乎这些信息总是会被剥离

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

例如在钢筋中:

{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}]}]}}

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

于 2021-03-17T18:32:36.453 回答