Erlang 为什么我的重新编译过程不能在控制台内部工作?
我有一个Erlang应用程序(目前只有几个库模块)捆绑在Rebar下。目录结构如下所示:Erlang 为什么我的重新编译过程不能在控制台内部工作?,erlang,rebar,erlang-shell,Erlang,Rebar,Erlang Shell,我有一个Erlang应用程序(目前只有几个库模块)捆绑在Rebar下。目录结构如下所示: MyProject - apps -- myapp --- ebin --- src --- yada - rebar - rebar.conf MyProject$。/按预期响应 我打开Erlang shell(MyProject$erl-pa apps/*/ebin myapp),可以很好地执行导出的函数 现在我编辑一个源文件,添加一个导出的函数,然后重新编译。但是,
MyProject
- apps
-- myapp
--- ebin
--- src
--- yada
- rebar
- rebar.conf
MyProject$。/按预期响应
我打开Erlang shell(MyProject$erl-pa apps/*/ebin myapp),可以很好地执行导出的函数
现在我编辑一个源文件,添加一个导出的函数,然后重新编译。但是,当我尝试执行新导出的函数时,我得到了一个错误——未定义的函数。我在erlangshell中执行myAppModule:module_info/0。它没有列出我刚刚添加到源文件中的新函数,也没有列出我对其他函数所做的更改
我删除相关的*.beam文件并重新编译。仍然看不到我的更改
但是,现在I q()退出Erlang shell并重新输入。你知道什么!一切正常,包括我的新功能
为什么会这样?如何重新编译?从贝壳还是怎样
请注意,如果您在执行erlang的“外部”重新编译文件,则必须显式地在shell中重新加载模块(使用
l(myAppModule)。
)。如果您从shell重新编译(使用c(myAppModule)。
),则模块将被重新编译并重新加载,但是.beam
文件将不会放在ebin
目录中,而是放在当前工作目录中。如何重新编译?从贝壳还是怎样
请注意,如果您在执行erlang的“外部”重新编译文件,则必须显式地在shell中重新加载模块(使用
l(myAppModule)。
)。如果从shell重新编译(使用c(myAppModule)。
),则模块将重新编译并重新加载,但.beam
文件将不会放在ebin
目录中,而是放在当前工作目录中。我从项目目录编译:./rebar compile。因此,我将尝试l(myAppModule)方法。我从项目目录编译:./rebar compile。因此,我将尝试l(myAppModule)方法。