2009-10-17 32 views

Trả lời

24

Vì các câu trả lời, một tiêu chuẩn mới đã nổi lên trong cộng đồng Erlang:

Rebar https://github.com/basho/rebar/

+4

Nó không phải là một tiêu chuẩn thực sự, nhưng một sự đóng góp. Việc tạo ra Erlang là một tiêu chuẩn vì nó được bao gồm trong bản phân phối. – tuscland

6

Đây là Makefile và Emakefile tôi thường sử dụng với make (origin unknown).

Makefile:

ERL=erl 
APPFILE=myApp.app 

all: ebin/$(APPFILE) 
    $(ERL) -make 

ebin/$(APPFILE): src/$(APPFILE) 
    cp $< [email protected] 

Emakefile:

{"src/*", [debug_info, {outdir, "ebin"}, {i, "include"}]}. 
7

tôi sử dụng một Rakefile gọi một Emakefile. Rakefile cho tính linh hoạt và Emakefile cho tốc độ!

build này hệ thống là khá mạnh mẽ, xem erl_rake trên GitHub

Tạo .app tác phẩm, xây dựng phiên bản tự động, chạy thử nghiệm EUnit. Và cho nó được xây dựng xung quanh một Rakefile, tôi đã thêm dễ dàng đẩy phát hành để AWS và chạy thử nghiệm của tôi với etap thay thế.

Tôi đã tùy chỉnh phiên bản cũ cho các dự án github của tôi.

+0

liên kết github của bạn là 404. –

+1

Cảm ơn Thom. Mặc dù nhận xét này đã lỗi thời. Giống như mọi người khác, bây giờ tôi sử dụng cốt thép – cstar

15

Chúng tôi cũng sử dụng Emakefile tương tự.

{"src/*", [debug_info, {outdir, "ebin"}, {i, "include"}]}. 

Tôi sử dụng chức năng làm cho chạy thử nghiệm sau khi biên dịch thành công.

Makefile chiết xuất:

all: compile 

compile: 
     erlc -o ebin +debug_info erl_make.erl  
     erl -pa ./ebin -eval "erl_make:make(development)" -s init stop -noshell 

erl_make.erl

-module(erl_make). 

-export([make/1]). 

make(Mode) -> 
    case make:all([{d, Mode}]) of 
     error -> 
      error; 
     _ -> 
      test_suite:test() 
    end. 
+0

Cảm ơn câu trả lời tuyệt vời này! =) –

1

Bạn có thể kiểm tra Makefiles của tôi, tôi đã đưa họ từ mochiweb hoặc một cái gì đó như thế. Xin lỗi nhưng mã có một số bộ phận dự án-quy định

http://github.com/JLarky/eadc-hub/blob/master/Makefile

 
MARKDOWN_SOURCES=$(wildcard doc/*.md) 
MARKDOWN_TARGETS=$(patsubst doc/%.md,doc/html/%.html,$(MARKDOWN_SOURCES)) 

all: eadc boot deps 

eadc: ebin 
cd src && $(MAKE) 

deps: 
(cd deps/somedeps;$(MAKE);) 

docs: erlang-docs # html-docs 

erlang-docs: doc/edoc 
(cd src;$(MAKE) docs) 

html-docs: doc/html $(MARKDOWN_TARGETS) 

doc/edoc: 
mkdir -p doc/edoc 

doc/html: 
mkdir -p doc/html 

doc/html/%.html: doc/%.md 
(title=`grep '^# ' $ [email protected] ;\ 
python doc/buildtoc.py $$t ;\ 
markdown $$t >> [email protected] ;\ 
rm $$t ;\ 
cat doc/footer.html >> [email protected]) 

ebin: 
mkdir -p ebin 

clean: clean-docs 
(cd src;$(MAKE) clean) 
(cd deps/*/; $(MAKE) clean) 
$(RM) -r priv 
$(RM) ebin/*.boot ebin/*.script ebin/*crash.dump ebin/*~ src/*~ priv/*~ *~ \#*\# 

clean-docs: clean-html 
$(rm) -rf doc/edoc 

clean-html: 
rm -rf doc/html 

boot: ebin/eadc.boot 

ebin/eadc.boot: ebin/eadc.rel ebin/eadc.app 
erl -pa ebin -noshel -run eadc_utils make_script -run erlang halt 

cleandb: 
$(RM) -r ebin/Mnesia* 

http://github.com/JLarky/eadc-hub/blob/master/support/include.mk

 
## -*- makefile -*- ## Erlang 

ERL := erl 
ERLC := $(ERL)c 

INCLUDE_DIRS := ../include $(wildcard ../deps/*/include) 
EBIN_DIRS := $(wildcard ../deps/*/ebin) 
ERLC_FLAGS := -W $(INCLUDE_DIRS:../%=-I ../%) $(EBIN_DIRS:%=-pa %) 

ifndef no_debug_info 
    ERLC_FLAGS += +debug_info 
endif 

ifdef debug 
    ERLC_FLAGS += -Ddebug 
endif 

EBIN_DIR := ../ebin 
DOC_DIR := ../doc/edoc 
EMULATOR := beam 

ERL_SOURCES := $(wildcard *.erl) 
ERL_HEADERS := $(wildcard *.hrl) $(wildcard ../include/*.hrl) 
ERL_OBJECTS := $(ERL_SOURCES:%.erl=$(EBIN_DIR)/%.$(EMULATOR)) 
ERL_DOCUMENTS := $(ERL_SOURCES:%.erl=$(DOC_DIR)/%.html) 
ERL_OBJECTS_LOCAL := $(ERL_SOURCES:%.erl=./%.$(EMULATOR)) 
APP_FILES := $(wildcard *.app) 
REL_FILES := $(wildcard *.rel) 
EBIN_FILES_NO_DOCS = $(ERL_OBJECTS) $(APP_FILES:%.app=../ebin/%.app) $(REL_FILES:%.rel=../ebin/%.rel) 
EBIN_FILES = $(ERL_DOCUMENTS) $(EBIN_FILES_NO_DOCS) 

MODULES = $(ERL_SOURCES:%.erl=%) 

../ebin/%.app: %.app 
cp $ 

http://github.com/JLarky/eadc-hub/blob/master/src/Makefile

 
include ../support/include.mk 

all: $(EBIN_FILES_NO_DOCS) 

docs: $(ERL_DOCUMENTS) 
*emphasized text* 
debug: 
$(MAKE) DEBUG=-DDEBUG 

clean: 
rm -rf $(EBIN_FILES) $(PLUGINS_OBJECTS) 
4

Tôi đề nghị công cụ của riêng tôi :) Eake ...rất giống với cào từ Ruby môi trường:

http://github.com/andrzejsliwa/eake

hoặc

http://andrzejsliwa.com/2009/05/28/eake-narzedzie-budowania-dla-erlanga-bazujace-na-rake/

Dưới đây là ví dụ eakefile

 
-module(eakefile). 
-compile([export_all]). 
-import(eake, [task/3, namespace/3, run_target/2, run/1]). 

execute() -> [ 

    namespace(db, "test", [ 
    task(migrate, "That is migration", fun(Params) -> 
     io:format("in migration params: ~w", [Params]), 
     run_target('db:rollback', []) 
    end), 

    task(rollback, "That is rollback", fun(_) -> 
     io:format("in rollback"), 
     run("ls") 
    end) 
    ]) 
]. 

và đây là ví dụ sử dụng:

 
$ eake db:migrate 
$ eake db:migrate db:rollback 
$ eake db:migrate=[1,atom] 
$ eake db:migrate=name 
2

Sử dụng Sinan để xây dựng và Faxien để cài đặt! Kiểm tra erlware.org. Họ là cách tốt hơn so với một tập tin thực hiện và cung cấp dễ dàng phân phối. Cả hai đều trong phát triển tích cực nặng và sẽ xuất hiện trong: http://www.manning.com/logan/

Các vấn đề liên quan