在Windows上编译Erlang代码

11

我安装了 Erlang 13B 并尝试跟随教程。

每次我到 c(tut),都会收到错误消息而不是(ok, tut),因此似乎没有安装模块。有人能指点一下我吗?

我已经尝试过 Emacs,但我不知道该怎么使用它,也没有接近让 Erlang 模式正常工作。例如,我在哪里输入:

  (setq load-path (cons  "C:/Program Files/erl5.6.2/lib/tools-<ToolsVer>/emacs"
    load-path))
  (setq erlang-root-dir "C:/Program Files/erl5.6.2")
  (setq exec-path (cons "C:/Program Files/erl5.6.2/bin" exec-path))
  (require 'erlang-start)

如果您同时了解Erlang和Emacs(它们都是非常好的软件),我建议您先把Emacs放在一边。不要同时学习两个系统。您可以使用任何文本编辑器与Erlang一起使用,而Notepad ++也很出色。 - Bernard Notarianni
6个回答

17

为了让c(tut)正常工作,当前目录中必须有一个tut.erl文件。

如果您在命令行中启动Erlang解释器,例如在Linux和OS X上常见的方式,那么这将很容易实现。但是在Windows上启动Erlang时,从“开始”菜单中的图标启动时,当前工作目录默认为werl.exe的位置,而不是tut.erl文件所在的地方。

为了使命令按预期工作,您需要在启动Erlang shell后将工作目录更改为tut.erl的位置。如果tut.erl在桌面上,则在Vista或Windows 7上,命令将类似于:

cd("c:/Users/myname/Desktop").

(是的,在Erlang字符串中必须使用正斜杠。反斜杠在Erlang字符串中是特殊字符。)

在Windows XP及更早版本中,您的桌面文件夹深度较深。在这些系统上,将 werl.exe 放入系统 PATH 中并使用命令行可能更简单。

虽然不是必需的,但您可能想考虑安装Cygwin。其Bash shell将为您提供更类似于Linux或OS X的环境,这将有助于您使用其他针对这些操作系统结构化的教程。


1
顺便提一下,一旦您在包含其他 Erlang 代码的目录中拥有一个 *.beam 文件,您可以设置 Windows 文件关联将 *.beam 文件与 werl.exe 关联起来,这样当您双击它们时,Erlang 将加载它们并隐式地将其工作目录设置为文件所在位置。 - Warren Young

10
安装 Erlang 后打开 shell 并输入以下命令:
1> pwd().
C:/Program Files/erl5.7.1/usr
ok
2>
假设您有一个名为"tut.erl"的文件位于桌面上。其内容可能如下:
-module(tut).
-compile(export_all).

hello_world() ->
  hello.

你必须先将当前工作目录更改为桌面(或者你想要进行编译的任何其他位置)。可能像这样:

2> cd("F:/Desktop").
F:/Desktop
ok
3>

然后您可以执行编译。

3> c(tut).
{ok,tut}
4>

然后测试该模块

4> tut:hello_world().
hello
5> 

更多信息请参考这里的文档:Erlang官方文档。 有关shell的更多信息,请查看此处:Shell模块

希望这能让您开始。


4
顺便说一下,在Windows中我最好的提示是为每个项目创建一个指向werl.exe的Windows快捷方式,然后将“运行位置”属性更改为当前工作目录。另一个提示是在“目标”属性中添加标志,比如-sname、-setcookie(在分布式环境中很有用)和可能的-pa以添加额外的路径到代码搜索路径中。关于这些的更多信息,请参见这里:http://erlang.org/doc/man/erl.html - Mazen Harake
感谢你抽出时间回答我的问题,但我无法让c(tut)正常工作,我仍然得到这个:Erlang(BEAM)模拟器版本5.6.2 [smp:2] [async-threads:0]Eshell V5.6.2(^ G中止) 1> cd(“ F:/ Desktop”)。 C:/ Program Files / erl5.6.2 / usr 好的 2> c(tut)。 ./tut.erl:none:没有那个文件或目录 错误 3>由于所有教程都假定这些模块已经安装,我以为它们是标准的。 我似乎找不到任何模块,这有点让人失落。 - Niall
1
你的命令cd("F:/Desktop")遇到了Windows命令行问题,因为cd无法跨驱动器更改目录。修改你的Erlang快捷方式以将工作目录设置为F:另外,help().显示shell命令。 - danio

1

你还可以在YourErlangInstallationPath\usr\下创建一个名为.erlang的初始化文件。

文件的内容应该类似于这样:

io:format("consulting .erlang in ~p~n" ,
[element(2,file:get_cwd())]).
%% 编辑到存储代码的目录
c:cd("O:/Erlang.Umut").
io:format("Now in:~p~n" , [element(2,file:get_cwd())]).

它将自动更改路径到你的工作文件夹。(显然,我的路径是O:/Erlang.Umut,你需要用你自己的路径替换它。)

无需每次启动控制台时更改文件夹。控制台将能够直接访问你的 erl 文件。


1

我最近在Windows上尝试了Erlang。

使用控制台窗口确保您正在使用的文本编辑器为文件提供正确的扩展名,即文件名.erl而不是像我的一样的文件名.erl.txt!

当我在记事本中保存文件时,它会添加.txt,因此我保存为Unicode。问题解决了。


0
如果你仍然收到“tut:erl:none: no such file or directory”的错误提示,那么文件名是错误的。如果你打开Windows命令提示符并移动到桌面,然后输入“dir”,你会发现tut.erl实际上被命名为tut.erl.txt。输入“ren tut.erl.txt tut.erl”并且现在你的编译将会工作。

0

当 werl 的当前工作目录与要编译的文件相同时,文件名将作为参数而不是整个路径。 否则,例如假设 tut.erl 放置在 C:\ErLang 教程中,可以尝试编译如下:

c("C:\\ErLang tutorials\\tut").

注意:
  1. 没有双引号会导致语法错误
  2. 反斜杠使用转义序列表示

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接