我想将Elixir集成到我们的项目中,好的旧代码不使用rebar
,所以我认为将.ex
文件构建到Emakefile
的规则可能是好主意,但是手册页here没有提到任何相关内容。
编辑:
我们的团队主要在Windows环境中工作,但部署将在Linux服务器上完成,因此我需要一个跨平台的解决方案。由于Erlang本身是跨平台的,我想用erl -make
命令来做。
当然我可以写一个Makefile
,但是我需要一个build.bat
或类似的东西在我们的开发环境中构建代码,因为我们没有make
我们开发机器上的命令。
任何人都有更好的主意吗?
更新
如果有人想知道,我这样做:
lib/elixir
目录复制到源代码目录,例如some_project/src/tools/elixir
。some_project/src/tools/elixir/src/elixir_transform.erl
和some_project/src/tools/elixir/src/*
添加到Emakefile
。将输出目录设置为some_project/ebin
(所有其他.beam
文件都位于此处。)src/elixir.app.src
复制到some_project/ebin/elixir.app
,然后对其进行编辑以修复版本代码。erl -pa ebin -make
dir。some_project
来构建Erlang代码
erl -pa ebin -s elixir_compiler core -s erlang halt
.ex
文件:%%! -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).
答案 0 :(得分:4)
如果你想显式编译Elixir,我会选择Makefile方法,因为Elixir总是支持它。但是,我建议使用预编译的二进制文件,或者甚至假设Elixir安装在每台开发人员机器中。您甚至可以向Emakefile添加任务,以确保每个人都使用正确的Elixir版本。
最后,关于编译自己的Elixir代码,我建议只使用mix
。 mix
是与Elixir一起提供的二进制文件,您只需从./src/tools/elixir/bin/mix compile
执行Emakefile
。
如果无法使用mix,您应该使用并行编译器,因为它将使用您机器中可用的所有内核编译文件,它将自动检测并解决文件之间的依赖关系。以下是从erlang调用并行编译器的示例:
https://github.com/basho/rebar/pull/347/files#L1R62
API非常简单。它希望将文件名列表编译为二进制文件,将目标文件列表输出为另一个二进制文件。