我的 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.beam
文件夹中找到 binary
。 最佳答案
行为在编译时解决。因此 Erlang 编译器应该找到行为束文件并调用行为模块的 behaviour_info/1
函数。
这里 test_behaviour.beam 不在编译器的代码路径中。您可以通过调用运行
erl -pa ebin -make
这为我解决了这个问题。我尝试在 Emakefile 中指定,但没有运气。也找不到文档。
还发现 -pa ebin 的 oder 必须在 -make 之前(但不确定为什么)。
关于erlang - Emakefile - 自定义行为未定义,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16198171/