2009-08-14 78 views
10

我安装了Erlang 13B并试图按照教程。在Windows上编译Erlang代码

每当我到达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) 
+0

我你在同一时间发现Erlang和Emacs(这两个都是很棒的软件)我建议你把Emacs放在一边作为开始。不要同时学习两个systemz。您可以在Erlang中使用任何文本编辑器,并且Notepad ++也做得很好。 – 2011-12-23 19:18:46

回答

16

对于c(tut)工作,必须有一个tut.erl文件在当前目录中。

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

要使命令按预期工作,必须在启动Erlang shell后将您的工作目录更改为tut.erl的位置。如果tut.erl是在桌面上,该命令将是这样的在Vista或Windows 7:

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

(是的,你必须使用正斜杠反斜杠是特殊二郎字符串。)

在Windows XP和更旧版本的桌面文件夹被埋得更深。将werl.exe放入系统PATH并在这些系统上使用命令行可能会更简单。

这不是必须的,但您可能要考虑安装Cygwin。它的Bash shell将为您提供更多的Linux或OS X环境,这将帮助您使用针对这些操作系统构建的其他教程。

+1

顺便说一下,一旦在其他Erlang代码的目录中有一个* .beam文件,就可以在* .beam文件和werl.exe之间建立一个Windows文件关联,这样当你双击它们时,Erlang会加载他们最终隐含地将其工作目录设置为文件的位置。 – 2009-08-14 17:13:32

9

安装后二郎开壳,做:

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 official documentation 更多信息外壳上,看这里:Shell module

希望这会得到你的开始。

+3

哦,顺便说一句,在windows中,我所拥有的绝对最佳技巧是为每个项目创建一个werl.exe的Windows快捷方式,然后将“Run in”属性更改为当前工作目录。另一个技巧是在“目标”属性中添加标志,例如-sname,-setcookie(在分布式环境中很有用),或许-pa向代码搜索路径添加其他路径。更多关于这些信息在这里:http://erlang.org/doc/man/erl.html – 2009-08-14 17:20:05

+0

感谢您抽出时间回答我的问题,但我不能让c(tut)工作,我仍然得到这个: (“F:/桌面”)的Erlang(BEAM)仿真器版本5.6.2 [smp:2] [异步线程:0] Eshell V5.6.2(中止与^ G) 1> C:/ Program Files/erl5.6.2/usr ok 2> c(tut)。 ./tut。erl:none:没有这样的文件或目录 错误 3> 因为所有的教程似乎都假设这些模块已经安装,我认为它们是标准配置;我似乎无法追踪自己的任何模块,这是一个下跌。 – Niall 2009-08-24 17:34:41

+1

您的命令cd(“F:/ Desktop”)。正在触及Windows命令行问题,即cd无法在驱动器盘符之间更改目录。修改您的erlang快捷方式将工作目录设置为F: btw help()。显示shell命令。 – danio 2009-09-16 10:48:52

1

你还可以根据YourErlangInstallationPath\usr\

创建一个名为.erlang初始化文件的文件应该是这个样子的内容;

 
io:format("consulting .erlang in ~p~n" , 
[element(2,file:get_cwd())]). 
%% Edit to the directory where you store your code 
c:cd("O:/Erlang.Umut"). 
io:format("Now in:~p~n" , [element(2,file:get_cwd())]). 

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

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

1

我最近在窗户上试过Erlang。

使用控制台窗口确保您使用的文本编辑器为您的文件提供正确的扩展名即。 filename.erl而不是filename.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:\二郎教程,可以尝试编译的,

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

注:

  1. 没有双引号的:导致语法错误
  2. 反斜杠使用给定转义序列