【问题标题】:Can I add include directories to the erl command?我可以将包含目录添加到 erl 命令吗?
【发布时间】:2011-05-20 06:26:42
【问题描述】:

使用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?如果没有,任何关于干燥的建议不要要求我在每次编译时输入讨厌的路径。

【问题讨论】:

    标签: erlang erlang-shell


    【解决方案1】:

    我很少从 shell 编译 - 仅用于带有 c(foo) 的小型测试脚本。我的设置是这样的:

    我有一个构建基础架构。 make 构建软件(这里的 make 只是 rebar 的包装)。然后我可以通过点击绑定到compile emacs 命令的F12emacs 中构建代码。在vim 中,如果我的vim 记忆对我有用(已经有几年了),你可以用:make 命令做同样的事情。现在这当然会构建代码并将其放入ebin 目录中。

    下一步是使用 ebin 目录的知识启动 Erlang:

     erl -pa ./ebin
    

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

    它还有一个好处是任何编译错误现在都在编辑器的管辖范围内,所以我可以快速跳转到错误并修复它。

    【讨论】:

    • 好的,这完全是解决我的问题的更好方法。我不知道我可以使用 l(foo) 来热加载编译后的代码。
    • 为了让事情变得更简单,我在项目根目录中创建了一个带有code:add_patha("./dict"). 的.erlang 文件。每次我在该项目上运行erl 时,它都会将“dict”路径添加到路径搜索列表的开头。
    【解决方案2】:

    你可以设置ERL_COMPILER_OPTIONS

    http://www.erlang.org/doc/man/compile.html

    【讨论】:

    • 那会像这样工作吗:ERL_COMPILER_OPTIONS='[{i,"/home/trotter/code/open-source/yaws/include"}]' erl ?
    猜你喜欢
    • 2020-06-22
    • 1970-01-01
    • 1970-01-01
    • 2013-11-18
    • 2014-02-07
    • 1970-01-01
    • 2010-11-07
    • 2013-07-04
    相关资源
    最近更新 更多