2012-07-01 2 views
2

.lfe 소스 파일을 OTP 프로젝트의 make 규칙에서 컴파일하는 표준 방법이 있습니까?make와 함께 LFE 파일 컴파일

문서에 따르면 OTP 응용 프로그램에서 여러 개의 파일을 컴파일하려는 경우 lfe_comp:file/1을 사용하게되어 있습니다 (여기서 소스 파일을 유지해야하는 곳은 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을 추가했습니다. Joe가 "Robert는 아무것도 변경하지 못했습니다."라고 말하면 사실입니다. 그래서 다시 작성했습니다. 이제 LFE 컨텍스트에서 유용한 옵션을 찾아야합니다. – rvirding

1

아니요. LFE는 OTP에서 지원하지 않으므로 erlc.lfe 파일에 대해 알지 못합니다. 그리고 내가 아는 한 erlc을 "열어서"파일을 처리하는 방법에 대한 정보를 동적으로 추가 할 수있는 방법이 없습니다. 대안으로 이것을 위해 lfec 스크립트를 작성하는 것입니다. 나는 그것에 대해 생각합니다.

LFE를 사용하는 것은 무엇인가요?

+0

나는 첫 번째 스태 브를 게시했습니다. 나는 주로 LFE를 재미있게 사용하고 있습니다. 내가 바닐라 얼랑과 함께 할 수 없었던 것은 분명합니다. 흥미로워 보이고, Lisp에서 부분적인 부분이기 때문에 편안하게 들어가기 위해 간단한 컴포넌트를 써야합니다. – Inaimathi

+1

@Inaimathi 예, 일부 트래픽이있는 http://groups.google.com/group/lisp-flavoured-erlang Google 그룹이 있습니다. github의 개발 브랜치는 아직 마스터 브랜치에 가지 않은 새로운 것들을 가지고 있습니다. – rvirding