使用rebar构建Erlang project的时候,通过设置rebar.config可以为rebar配置各种选项。
其中比较常用的有 erl_opts 这个选项。
{erl_opts, [smp, debug_info, {d, 'APP', myproject}, {d, debug}]}.
实际上它是设置Erlang Compiler的参数。
见 http://www.erlang.org/doc/man/compile.html
平时我们可以在每个 .erl 文件的头部写上这种语句
-compile({no_auto_import,[error/1]}).
来告诉编译器编译本文件时用到的编译选项。
如果把这些参数放在rebar.config里面设置的话,就可以对所有文件使用同一套编译参数了。
比如在rebar.config里面:
{erl_opts, [smp, debug_info, nowarn_unused_function]}.
这里设置了nowarn_unused_function,即module中有未被使用的function时不触发警告。
效果等同于在每个module文件中加入这句
-compile(nowarn_unused_function).
有如下情景,使用rebar.config来配置全局编译参数时会比较方便:
在开发和调试阶段,可能有需要在console打印一些调试信息,通常会用到io:format. 但是发布的程序,在正式环境下是不需要打印这些东西的。
那么我们可以这样做。
在rebar.config设置erl_opts, 定义一个Macro, {d, debug}, 表示调试模式。
{erl_opts, [smp, no_debug_info, {d, debug}]}.
然后在一个全局的hrl文件中定义输出调试信息的Macro
-ifdef(debug). -define(TRACE(Str), io:format(Str)). -define(TRACE(Str, Args), io:format(Str, Args)). -else. -define(TRACE(Str), void). -define(TRACE(Str, Args), void). -endif.
这样,我们在需要打印调试信息的地方用
TRACE("something to show") 而不是直接用 io:format.
好处是, 当发布正式版本时, 只须要把rebar.config里面的{d, debug}去掉而不用改动代码,就可以不打印调试信息了。
浙公网安备 33010602011771号