我能否在erl命令中添加包含目录?

7

使用erlc编译Erlang文件时,可以像这样添加其他的包含目录:

erlc -I /home/trotter/code/open-source/yaws/include src/myapp.erl

但是,当我在erl中编译时,我没有看到在命令行中执行此操作的方法。相反,在repl中,我必须执行以下操作:

> compile:file("src/myapp", 
               [verbose,
                report_errors,
                {i,"/home/trotter/code/open-source/yaws/include"}]).

有没有更好的方法来做这件事,我不知道,比如传递一些命令行参数给erl?如果没有,有没有任何建议可以使这个过程更简单,而且不需要每次编译都输入繁琐的路径。

2个回答

6

我很少从shell编译 - 只有对于使用 c(foo)的小型测试脚本。我的设置如下:

我有一个构建基础设施。 make 构建软件(在这里,make只是 rebar 的包装器)。然后,我可以通过按下绑定到 compile emacs 命令的 F12 在 emacs 中构建代码。如果我的vim记忆力没有出错的话,您也可以使用 :make 命令在 vim 中执行相同的操作(已经过了几年了)。现在,当然会构建代码并将其放入ebin目录中。

下一步是启动Erlang,并了解ebin目录:

 erl -pa ./ebin

这意味着对模块 foo 的任何引用都会检查 ./ebin/foo.beam。当我发现需要修复代码时,我在编辑器中进行修复,使用 F12 编译代码,然后在 shell 中执行 l(foo),这将热加载代码。

这样做的好处是任何编译错误现在都在编辑器的管辖范围内,所以我可以快速跳转到错误并进行修复。


好的,这绝对是我的问题的更好解决方案。我不知道我可以使用l(foo)来热加载编译代码。 - Trotter
为了让事情变得更简单,我在项目根目录下创建了一个.erlang文件,并添加了code:add_patha("./dict")。这将在每次我运行该项目的erl时,将“dict”路径添加到路径搜索列表的开头。 - Carlosedp

2

1
那么这样会起作用吗:ERL_COMPILER_OPTIONS='[{i,"/home/trotter/code/open-source/yaws/include"}]' erl? - Trotter

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