Bạn sử dụng công cụ nào để xây dựng chương trình Erlang: Emake, makiefile hay cách khác?Bạn sử dụng công cụ nào để xây dựng chương trình Erlang?
Trả lời
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:
Đâ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"}]}.
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.
liên kết github của bạn là 404. –
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
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.
Cảm ơn câu trả lời tuyệt vời này! =) –
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)
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
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/
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