2012-07-01 73 views
2

在OTP項目中是否有標準方式編譯來自make規則的.lfe源文件?使用make編譯LFE文件

根據文檔,我應該使用lfe_comp:file/1,如果我想在一個OTP應用程序中編譯多個這樣的文件(我應該保留源文件在src中,但這並沒有多大幫助,但二進制文件在ebin)。

理想情況下,我能夠做到像

erlc -Wf -o ebin src/*lfe 

但似乎沒有要在erlclfe支持。我能想到的最好的解決方案是我的頭頂

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

但這似乎不雅。任何更好的想法?

回答

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). 
+0

我可以借用這個。 :-) – rvirding

+0

@rvirding - 隨意;這就是它的目的。 – Inaimathi

+0

我已經借了它,並添加了一個簡單的lfec到開發分支。正如喬曾經說過的,「羅伯特不能對任何東西做出小小的改變」,這是真的,所以我重寫了它。現在我只需要確定哪些選項在LFE環境中很有用。 – rvirding

1

不是。 OFE不支持LFE,因此erlc不知道有關.lfe文件。據我所知,沒有辦法「打開」erlc並動態添加如何處理文件的信息。另一種方法是爲此編寫一個lfec腳本。我會考慮的。

作爲利益的問題什麼是使用LFE的?

+0

我已經發布了第一次刺戳它。我目前主要使用LFE來獲得樂趣。當然,我無法用香草Erlang做什麼。它看起來很有趣,我偏愛Lisp,所以我正在玩一些簡單的組件來讓它變得舒適。 – Inaimathi

+1

@Inaimathi好的,Google羣組http://groups.google.com/group/lisp-flavoured-erlang有一些流量,並不多。 github上的開發分支有一些新的東西,但還沒有到達主分支。 – rvirding