Erlang の application behaviour でコマンドライン引数をとる方法
背景
make check でテストを silent に実行し、make vcheck で verbose に実行するということを実現したかった。
error_logger を利用しているので端末にログを出すかどうかは
error_logger:tty(false)
のように制御できる。
このフラグをコマンドラインから渡したい。
方法
概要は以下の通り。
- application behaviour 用に「アプリケーション名.app」 ファイルを用意
- 「アプリケーション名.app」 にフラグのデフォルト値を指定
- コードからフラグを取得
- 起動時にコマンドライン引数でフラグのデフォルト値を上書き
application behaviour 用に「アプリケーション名.app」 ファイルを用意し、今回は debug という名前でフラグを設定。
{application, mio, [{description, "mio"}, {vsn, "1"}, {modules, [mio]}, {registered, [mio]}, {applications, [kernel, stdlib]}, {mod, {mio,[]}}, {debug, false} %% これがフラグ ]}.
フラグは application:get_env/2 で取得できる。第一引数はアプリケーション名。
{ok, IsDebugMode} = application:get_env(mio, debug)
起動時にフラグを true で上書き。
erl -mio -noshell -noinput -pa ebin mio -s mio start -mio debug true
以上。