2013-01-25 43 views
1

我想將Elixir集成到我們的項目中,而且舊代碼不使用rebar,所以我認爲將.ex文件編寫爲Emakefile的規則可能是一個好主意,但手冊頁here沒有提及任何內容相關。是否可以擴展'erl -make`命令來執行除編譯.erl文件之外的其他內容?

編輯:

我們的團隊工作主要是在Windows環境中,但將部署在Linux服務器上完成,所以我需要一個跨平臺的解決方案。由於Erlang本身是跨平臺的,我想用erl -make命令來完成。

當然,我可以寫一個Makefile,但後來我需要一個build.bat什麼都建立在我們的開發環境中的代碼,因爲我們沒有對我們的開發的機器make命令。

任何人有更好的主意嗎?

更新:

如果有人想知道,我在做這樣說:

  1. 複製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構建Erlang代碼,在some_project dir中。
  5. 運行erl -pa ebin -s elixir_compiler core -s erlang halt
  6. 現在構建藥劑編譯器,我們在我們的代碼工作藥劑環境,我用下面的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). 
+0

我想我可能會編寫一個parse_transform並將其掛接到一個特殊的空模塊,以便在編譯時做任何我想做的事情,但這有點麻煩...... – l04m33

+0

我最後使用了Makefile和bat方法,事實證明它不是那麼糟糕...... – l04m33

回答

4

如果你想明確地編譯Elixir,我會使用Makefile的方法,因爲它總是會被Elixir支持。不過,我會推薦預編譯的二進制文件,或者甚至假定Elixir安裝在每臺開發人員機器中。您甚至可以將任務添加到Emakefile,以確保每個人都使用正確的Elixir版本。

最後,關於編譯您自己的Elixir代碼,我會建議您僅使用mixmix是一個與Elixir一起發佈的二進制文件,您可以簡單地從您的Emakefile中執行./src/tools/elixir/bin/mix compile

如果不能使用混合,則應使用並行編譯器,因爲它會使用機器中可用的所有內核編譯文件,並且它會自動檢測並解決文件之間的依賴關係。下面是從二郎調用並行編譯的一個示例:

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

API非常簡單。它期望一個文件名列表以二進制形式編譯,而目錄將文件輸出爲另一個二進制文件。

+1

謝謝!終於有人出現了,他是Elixir的創造者! +1爲並行編譯器提示:) – l04m33

相關問題