I'm learning erlnag and have a small doubt regarding '.beam' file creation. For example I have helloworld.erl and top.erl files and helloworld.erl is imported in top.erl.
top.erl:
-module(top).
-import(helloworld, [start/0]).
-export([main/0]).
main() ->
io:fwrite("hello\n"),
start().
helloworld.erl
-module(helloworld).
-export([start/0]).
start() ->
io:fwrite("hello world\n").
Then compiling top.erl using "erlc top.erl".Then, it is creating only top.beam file but not creating helloworld.beam file.
But when we see in case of python and java, object files will be generate for the imported file also while compiling importing file.
is this the behavior(i.e not creating .beam file for imported file) of 'erlang' or am i understood wrong?
(or)
Please explain the process to get the '.beam' files for imported one also while running importing module.
Thanks..
2条答案
按热度按时间l0oc07j21#
erlc
只编译您要求它编译的文件。您可以使用以下命令编译当前目录中的所有文件:您可能需要使用工具来构建项目。其中一个内置选项是the
make
module(不要与make
命令行工具混淆)。您可以使用以下命令运行它:它在当前目录中查找名为
Emakefile
file的配置文件,但如果没有,它将只编译目录中的所有源文件。其他替代项为rebar3和erlang.mk。
ac1kyiln2#
请说明在运行导入模块时获取导入的.beam文件的过程。
没有。而且,编写Erlang的人也不会在模块中使用
-import
,因为它会混淆代码的读者,混淆所调用函数的实际定义位置。通常,当你使用语法start()
调用函数时,这意味着函数是在被调用的模块中定义的,而当函数在另一个模块中定义时,可以使用语法helloworld:start()
调用它,这会通知代码的读者,他们可以检查helloworld
模块来读取start()
函数的定义。但是当我们看到Python和Java时,在编译导入文件时也会为导入文件生成目标文件。
Erlang的
-import
不是这样工作的。