可以扩展`erl -make`命令来执行除编译.erl文件之外的其他操作吗?

时间:2013-01-25 07:19:05

标签: erlang makefile elixir erl

我想将Elixir集成到我们的项目中,好的旧代码不使用rebar,所以我认为将.ex文件构建到Emakefile的规则可能是好主意,但是手册页here没有提到任何相关内容。

编辑:

我们的团队主要在Windows环境中工作,但部署将在Linux服务器上完成,因此我需要一个跨平台的解决方案。由于Erlang本身是跨平台的,我想用erl -make命令来做。

当然我可以写一个Makefile,但是我需要一个build.bat或类似的东西在我们的开发环境中构建代码,因为我们没有make我们开发机器上的命令。

任何人都有更好的主意吗?

更新

如果有人想知道,我这样做:

  1. 将Elixir源代码树中的lib/elixir目录复制到源代码目录,例如some_project/src/tools/elixir
  2. 按顺序将some_project/src/tools/elixir/src/elixir_transform.erlsome_project/src/tools/elixir/src/*添加到Emakefile。将输出目录设置为some_project/ebin(所有其他.beam文件都位于此处。)
  3. 将Elixir源代码树中的src/elixir.app.src复制到some_project/ebin/elixir.app,然后对其进行编辑以修复版本代码。
  4. erl -pa ebin -make dir。
  5. 中运行some_project来构建Erlang代码
  6. 运行erl -pa ebin -s elixir_compiler core -s erlang halt
  7. 构建Elixir编译器
  8. 现在我们的代码中有一个工作的Elixir环境,我使用以下escript来构建我们的自定义.ex文件:
  9. %%! -pa ./ebin
    main(_) ->
        ExList = [ 
            <<"source_1.ex">>,
            <<"source_2.ex">>,
            <<"source_3.ex">>],
        application:start(elixir),
        gen_server:call(elixir_code_server, {compiler_options, [{docs, true}, {debug_info, true}]}),
        [elixir_compiler:file_to_path(F, <<"./ebin">>) || F <- ExList],
        erlang:halt(0).
    

1 个答案:

答案 0 :(得分:4)

如果你想显式编译Elixir,我会选择Makefile方法,因为Elixir总是支持它。但是,我建议使用预编译的二进制文件,或者甚至假设Elixir安装在每台开发人员机器中。您甚至可以向Emakefile添加任务,以确保每个人都使用正确的Elixir版本。

最后,关于编译自己的Elixir代码,我建议只使用mixmix是与Elixir一起提供的二进制文件,您只需从./src/tools/elixir/bin/mix compile执行Emakefile

如果无法使用mix,您应该使用并行编译器,因为它将使用您机器中可用的所有内核编译文件,它将自动检测并解决文件之间的依赖关系。以下是从erlang调用并行编译器的示例:

https://github.com/basho/rebar/pull/347/files#L1R62

API非常简单。它希望将文件名列表编译为二进制文件,将目标文件列表输出为另一个二进制文件。