1

rebarElixir.exを私たちのプロジェクトに統合したかったのですが、古き良きコードEmakefile.

編集:

私たちのチームは主に Windows 環境で作業していますが、デプロイは Linux サーバーで行うため、クロスプラットフォーム ソリューションが必要です。erl -makeErlang自体がクロスプラットフォームなので、コマンドでやりたかった。

もちろん、 を書くことはできますが、開発マシンにはコマンドがないため、開発環境でコードをビルドするには やそれに似たものMakefileが必要になります。build.batmake

誰でも良いアイデアがありますか?

アップデート:

誰かが知りたい場合のために、私はこのようにしています:

  1. lib/elixirElixir ソース ツリーのディレクトリをソース ディレクトリにコピーしますsome_project/src/tools/elixir
  2. 、 に、 をこの順序で追加some_project/src/tools/elixir/src/elixir_transform.erlします。出力ディレクトリを(他のすべてのファイルはそこにあります) に設定します。some_project/src/tools/elixir/src/*Emakefilesome_project/ebin.beam
  3. src/elixir.app.srcElixir ソース ツリーを にコピーしsome_project/ebin/elixir.app、編集してバージョン コードを修正します。
  4. direrl -pa ebin -makeで , を実行して、Erlang コードをビルドします。some_project
  5. を実行して Elixir コンパイラをビルドします。erl -pa ebin -s elixir_compiler core -s erlang halt
  6. これで、コードに動作する Elixir 環境ができました。次の escript を使用してカスタム.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).
4

1 に答える 1

4

Elixir を明示的にコンパイルする場合は、常に Elixir でサポートされている Makefile アプローチを使用します。ただし、コンパイル済みのバイナリをお勧めするか、各開発者のマシンに Elixir がインストールされていると仮定します。Emakefile にタスクを追加して、全員が適切なバージョンの Elixir を使用していることを保証することもできます。

最後に、独自の Elixir コードのコンパイルについては、単純に を使用することをお勧めしmixます。mixは Elixir に同梱されているバイナリで./src/tools/elixir/bin/mix compileEmakefile.

混合を使用できない場合は、並列コンパイラを使用する必要があります。これは、マシンで使用可能なすべてのコアを使用してファイルをコンパイルし、ファイル間の依存関係を自動的に検出して解決するためです。以下は、erlang から並列コンパイラを呼び出す例です。

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

API は非常にシンプルです。バイナリとしてコンパイルされるファイル名のリストと、別のバイナリとしてファイルを出力するディレクトリが必要です。

于 2013-02-11T21:00:38.130 に答える