4

Erlang プロジェクトでラガーをセットアップすることにしました。erlang.mk を使っているので追記

ERLC_OPTS = +'{parse_transform, lager_transform}' 

私のMakefileに。make allエラーなしでモジュールを実行およびコンパイルできます。erlコンソールを起動し、lager を使用してモジュールを含むアプリケーションを実行することもできます。エラーは生成されず、コンソール セッション中に大きなログ メッセージが記録されます。すべてがうまくいっているようです(ラガーを使用したのはこれが初めてです)。しかし、Common Test を実行すると、大きな呼び出しは失敗します。

10:11:17.174 [error] CRASH REPORT Process <0.238.0> with 2 neighbours exited with reason: call to undefined function lager:info("Params: ~p", [[]]) in gen_server:init_it/6 line 328

私がテストしているモジュールが正しくコンパイルされているように見えるので、これはより大きなモジュールが存在しないことに問題があると思います。ただし、これを追加すると:

erlang:display(lager:module_info()),

最初の lager 呼び出しの上で成功し、lager のモジュール情報を出力します。私が行っているロギング呼び出しは、機能するために解析変換マジックを利用していると思いますが、これは私の共通テストの実行中には存在しません。

どんな提案でも大歓迎です!

4

2 に答える 2

3

Makefile にスペルミスがあったことが判明しましたが、その過程で erlang.mk について多くのことを学びました。erlang.mk は別の名前の変数を探していました。

私はもともとこれを Makefile に入れました:

ERLC_OPTS = +'{parse_transform, lager_transform}'

しかし、erlang.mk はモジュールをテストする前にコンパイルするために ERLC_OPTS を使用しません。Common Test スイートの前に常に再コンパイルされます。モジュールをテスト用の解析変換でコンパイルするには、次のようにする必要がありました。

# Compile flags
ERLC_COMPILE_OPTS= +'{parse_transform, lager_transform}'

# Use the same settings for compiling releases as well as for testing
ERLC_OPTS= $(ERLC_COMPILE_OPTS)
TEST_ERLC_OPTS= $(ERLC_COMPILE_OPTS)

これにより、テスト中にアプリケーションのソース コードがまったく同じ設定でコンパイルされることが保証されます。

于 2014-08-27T20:54:42.070 に答える
3

これは、ERLC_OPTS および TEST_ERLC_OPTS の erlang.mk の値をシャドウしないが、それらに追加する Stratus3D 回答のわずかな再構成です。

# this must be first
include erlang.mk

# Compile flags
ERLC_COMPILE_OPTS= +'{parse_transform, lager_transform}'

# Append these settings
ERLC_OPTS += $(ERLC_COMPILE_OPTS)
TEST_ERLC_OPTS += $(ERLC_COMPILE_OPTS)
于 2014-10-22T20:58:57.100 に答える