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 文件。因此,解决方法可能是用此标记标记这些光束文件。
我正在开发一个处理 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 文件。因此,解决方法可能是用此标记标记这些光束文件。