5

私のtestプロジェクトは次のように構成されています。

./Emakefile:

{"source/*", [debug_info, {outdir, "binary"}]}.

./source/test.erl:

-module(test).
-behaviour(test_behaviour).

./source/test_behaviour.erl:

-module(test_behaviour).
-export([behaviour_info/1]).

behaviour_info(callbacks) -> [];
behaviour_info(_) -> undefined.

erl -makeプロジェクト ディレクトリ ( ) でコマンドを使用すると.、次の出力が得られます。

再コンパイル: source/test_behaviour
再コンパイル: ソース/テスト
source/test.erl:2: 警告: 動作 test_behaviour 未定義

erlがこの警告を出力するのはなぜですか? test_behaviour.erl以前にコンパイルしたので、フォルダー内でtest.erl見つけることができるはずです。test_behaviour.beambinary

4

1 に答える 1

4

動作はコンパイル時に解決されます。したがって、Erlang コンパイラはビヘイビア ビーム ファイルを見つけて、ビヘイビア モジュールのbehaviour_info/1関数を呼び出す必要があります。

ここで、test_behaviour.beam はコンパイラのコード パスにありません。呼び出すことで実行できます

erl -pa ebin -make

これで問題は解決しました。Emakefile で指定しようとしましたが、うまくいきませんでした。ドキュメントも見つかりませんでした。また、-pa ebin の順序は -make の前でなければならないこともわかりました (理由はわかりません)。

于 2013-04-24T17:48:33.013 に答える