読者です 読者をやめる 読者になる 読者になる

Erlangのcommon testでcoverageをとろうとしてあまりにも初歩的なハマリ

要するにerlcでcoverageを取るための情報を付与したいのだが、そのオプションが分からずハマった。
erlのプロンプトからは、

1> compile:file(File, [debug_info]).

すればいいことはすぐ分かったのだが、erlcコマンドを使ってMakefileに書きたいではないか。単純に-dのオプションを渡すと、erlc自体がデバッグモードになってしまう。
この場合、debug_infoのオプションを渡すために +xxxx というコマンドラインオプションを指定すればいいということに気づくのに2,3時間かかった。
で、「プログラミングErlang」のサンプルMakefileをベースにするとこんな感じだろうか。

.SUFFIXES:      .erl    .beam   .yrl

.erl.beam:
        erlc -W +debug_info $<

(中略)

MODS = project

all:    compile

compile:        ${MODS:%=%.beam}

ct:     compile
        cp *.beam ./test
        /パス/run_test -dir . -logdir ./logs -cover ./config/project.coverspec

./config/project.coverspecは、Erlang Common Test の Code Coverage Analysis 便利! - Higepon’s blogのところを参考にして、本家ドキュメントのサンプルを大幅に簡素化すればよろし(手抜き)

      %% Cover analysis level.
      %% Level = details | overview
      {level, details}.

      %% Specific modules to include in cover.
      %% Mods = [atom()]
      {incl_mods, [target_module]}