erlang 为导入的模块生成.beam文件

9vw9lbht  于 2022-12-08  发布在  Erlang
关注(0)|答案(2)|浏览(253)

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..

l0oc07j2

l0oc07j21#

erlc只编译您要求它编译的文件。您可以使用以下命令编译当前目录中的所有文件:

erlc *.erl

您可能需要使用工具来构建项目。其中一个内置选项是the make module(不要与make命令行工具混淆)。您可以使用以下命令运行它:

erl -make

它在当前目录中查找名为Emakefile file的配置文件,但如果没有,它将只编译目录中的所有源文件。
其他替代项为rebar3erlang.mk

ac1kyiln

ac1kyiln2#

请说明在运行导入模块时获取导入的.beam文件的过程。
没有。而且,编写Erlang的人也不会在模块中使用-import,因为它会混淆代码的读者,混淆所调用函数的实际定义位置。通常,当你使用语法start()调用函数时,这意味着函数是在被调用的模块中定义的,而当函数在另一个模块中定义时,可以使用语法helloworld:start()调用它,这会通知代码的读者,他们可以检查helloworld模块来读取start()函数的定义。
但是当我们看到Python和Java时,在编译导入文件时也会为导入文件生成目标文件。
Erlang的-import不是这样工作的。

相关问题