【问题标题】:What tool do you use to build an Erlang program?您使用什么工具来构建 Erlang 程序?
【发布时间】:2016-07-29 12:01:01
【问题描述】:

您使用什么工具来构建 Erlang 程序:Emake、makiefile 还是其他?

【问题讨论】:

    标签: build erlang


    【解决方案1】:

    自从有了这些答案,Erlang 社区中出现了一个新标准:

    钢筋 https://github.com/basho/rebar/

    【讨论】:

    • 确实不是标准,而是贡献。 Erlang 的 make 是一个标准,因为它包含在发行版中。
    【解决方案2】:

    我们也使用类似的 Emakefile。

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

    我使用 erlang make 功能在编译成功后运行测试。

    Makefile 提取:

    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.
    

    【讨论】:

    • 感谢您的出色回答! =)
    【解决方案3】:

    我使用 Rakefile 调用 Emakefile。 Rakefile 的灵活性和 Emakefile 速度

    这个构建系统非常强大,见erl_rakeGitHub

    生成 .app 文件,自动构建发布,运行 EUnit 测试。 鉴于它是围绕 Rakefile 构建的,我添加了轻松将发布推送到 AWS 并使用 etap 运行我的测试。

    我为我的 github 项目定制了一个旧版本。

    【讨论】:

    • 谢谢汤姆。虽然这个评论已经过时了。和其他人一样,我现在使用钢筋
    【解决方案4】:

    这里是我常用的makefile和Emakefile(来源未知)。

    生成文件:

    ERL=erl
    APPFILE=myApp.app
    
    all: ebin/$(APPFILE)
        $(ERL) -make 
    
    ebin/$(APPFILE): src/$(APPFILE)
        cp $< $@ 
    

    Emake 文件:

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

    【讨论】:

      【解决方案5】:

      我提出我自己的工具 :) Eake ...与 Ruby 环境中的 rake 非常相似:

      http://github.com/andrzejsliwa/eake

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

      这里是 eakefile 示例

      -模块(eakefile)。 -编译([export_all])。 -import(eake, [task/3, namespace/3, run_target/2, run/1])。 执行()-> [ 命名空间(数据库,“测试”,[ 任务(迁移,“那是迁移”,乐趣(参数)-> io:format("在迁移参数中:~w", [Params]), run_target('db:rollback', []) 结尾), 任务(回滚,“那是回滚”,乐趣(_)-> io:format("在回滚中"), 运行(“ls”) 结尾) ]) ]。

      这是使用示例:

      $ eake db:迁移 $ eake db:migrate db:rollback $ eake db:migrate=[1,atom] $ eake db:迁移=名称

      【讨论】:

        【解决方案6】:

        搭建用思南,安装用发信!查看 erlware.org。它们比 make 文件要好得多,并且易于分发。它们都处于积极的开发中,并将出现在:http://www.manning.com/logan/

        【讨论】:

          【解决方案7】:

          你可以查看我的 Makefiles,我从 mochiweb 或类似的地方获取它们。 抱歉,代码有一些项目指定的部分

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

          MARKDOWN_SOURCES=$(通配符文档/*.md) MARKDOWN_TARGETS=$(patsubst doc/%.md,doc/html/%.html,$(MARKDOWN_SOURCES)) 全部:eadc 引导部门 EADC:埃宾 cd src && $(MAKE) 部门: (cd deps/somedeps;$(MAKE);) 文档:erlang-docs # html-docs erlang 文档:doc/edoc (cd src;$(MAKE) 文档) html-docs: doc/html $(MARKDOWN_TARGETS) 文档/文档: mkdir -p 文档/edoc 文档/html: mkdir -p 文档/html doc/html/%.html: doc/%.md (标题=`grep '^# ' $ $@ ;\ python 文档/buildtoc.py $$t ;\ 降价 $$t >> $@ ;\ rm $$t;\ cat doc/footer.html >> $@) 埃宾: mkdir -p ebin 清洁:清洁文档 (cd src;$(MAKE) clean) (cd deps/*/; $(MAKE) clean) $(RM) -r 隐私 $(RM) ebin/*.boot ebin/*.script ebin/*crash.dump ebin/*~ src/*~ priv/*~ *~ \#*\# 清洁文档:清洁 html $(rm) -rf 文档/edoc 干净的html: rm -rf 文档/html 引导:ebin/eadc.boot ebin/eadc.boot:ebin/eadc.rel ebin/eadc.app erl -pa ebin -noshel -run eadc_utils make_script -run erlang halt 清洁数据库: $(RM) -r ebin/Mnesia*

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

          ## -*- makefile -*- ## Erlang ERL := 错误 ERLC := $(ERL)c INCLUDE_DIRS := ../include $(通配符 ../deps/*/include) EBIN_DIRS := $(通配符 ../deps/*/ebin) ERLC_FLAGS := -W $(INCLUDE_DIRS:../%=-I ../%) $(EBIN_DIRS:%=-pa %) ifndef no_debug_info ERLC_FLAGS += +debug_info 万一 ifdef 调试 ERLC_FLAGS += -Ddebug 万一 EBIN_DIR := ../ebin DOC_DIR := ../doc/edoc 模拟器 := 光束 ERL_SOURCES := $(通配符 *.erl) ERL_HEADERS := $(通配符 *.hrl) $(通配符 ../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 := $(通配符 *.app) REL_FILES := $(通配符 *.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) 模块 = $(ERL_SOURCES:%.erl=%) ../ebin/%.app: %.app cp $

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

          包括 ../support/include.mk 全部:$(EBIN_FILES_NO_DOCS) 文档:$(ERL_DOCUMENTS) *强调文字* 调试: $(MAKE) 调试=-DDEBUG 干净的: rm -rf $(EBIN_FILES) $(PLUGINS_OBJECTS)

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2015-07-22
            • 1970-01-01
            • 2017-11-29
            • 2011-04-14
            • 1970-01-01
            • 2012-09-14
            • 2010-11-29
            • 1970-01-01
            相关资源
            最近更新 更多