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

あまり。LFE は OTP でサポートされていないため、ファイルerlcについてはわかりません。.lfeまた、私の知る限り、erlc を「開いて」、ファイルの処理方法に関する情報を動的に追加する方法はありません。別の方法はlfec、このためのスクリプトを作成することです。私はそれについて考えるだろう。

興味深いことに、LFE は何のために使用されていますか?

于 2012-07-02T01:23:30.247 に答える