2

是否有从OTP 项目中.lfe的规则编译源文件的标准方法?make

根据文档,我应该使用lfe_comp:file/1,如果我想在 OTP 应用程序中编译多个此类文件(我应该将源文件保存在 中src,但二进制文件保存在 中ebin),这并没有多大帮助。

理想情况下,我可以做类似的事情

erlc -Wf -o ebin src/*lfe

但是好像没有lfe支持erlc。我能想到的最佳解决方案是

find src/*lfe -exec erl -s lfe_comp file {} -s init stop \;
mv src/*beam ebin/

但这似乎不优雅。有更好的想法吗?

4

2 回答 2

4

根据 rvirding 的建议,这lfec是我在上面想要做的第一次尝试(几乎没有别的)。我会从Makefilewith调用它./lfec -o ebin src/*lfe

#!/usr/bin/env escript
%% -*- erlang -*-
%%! -smp enable -sname lfec -mnesia debug verbose
main(Arguments) ->
    try
        {Opts, Args} = parse_opts(Arguments),
        case get_opt("-o", Opts) of
            false ->
               lists:map(fun lfe_comp:file/1, Args);
            Path ->
               lists:map(fun (Arg) -> lfe_comp:file(Arg, [{outdir, Path}]) end,
                         Args)
        end
    catch
        _:_ -> usage()
    end;
main(_) -> usage().

get_opt(Target, Opts) -> 
    case lists:keyfind(Target, 1, Opts) of
        false -> false;
        {_} -> true;
        {_, Setting} -> Setting
    end.

parse_opts(Args) -> parse_opts(Args, []).
parse_opts(["-o", TargetDir | Rest], Opts) ->
    parse_opts(Rest, [{"-o", TargetDir} | Opts]);
parse_opts(Args, Opts) -> {Opts, Args}.

usage() ->
    io:format("usage:\n"),
    io:format("-o [TargetDir] -- output files to specified directory\n"),
    halt(1).
于 2012-07-02T05:12:41.260 回答
1

并不真地。OTP 不支持 LFE,因此erlc不了解.lfe文件。据我所知,没有办法“打开” erlc 并动态添加如何处理文件的信息。另一种方法是为此编写lfec脚本。我会考虑的。

就像一个有趣的问题一样,使用 LFE 是为了什么?

于 2012-07-02T01:23:30.247 回答