使用make编译LFE文件

时间:2012-07-01 01:04:28

标签: erlang makefile lfe

是否有标准方法从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/

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

2 个答案:

答案 0 :(得分:3)

根据rvirding的建议,这是lfec的第一次尝试,它可以完成我想要的任务(而且几乎没有别的)。我会使用Makefile./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).

答案 1 :(得分:1)

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

感兴趣的是什么使用LFE?