我想將Elixir集成到我們的項目中,而且舊代碼不使用rebar
,所以我認爲將.ex
文件編寫爲Emakefile
的規則可能是一個好主意,但手冊頁here沒有提及任何內容相關。是否可以擴展'erl -make`命令來執行除編譯.erl文件之外的其他內容?
編輯:
我們的團隊工作主要是在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
文件都位於那裏)。 - 將Elixir源代碼樹中的
src/elixir.app.src
複製到some_project/ebin/elixir.app
,然後對其進行編輯以修復版本代碼。 - 通過運行
erl -pa ebin -make
構建Erlang代碼,在some_project
dir中。 - 運行
erl -pa ebin -s elixir_compiler core -s erlang halt
- 現在構建藥劑編譯器,我們在我們的代碼工作藥劑環境,我用下面的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).
我想我可能會編寫一個parse_transform並將其掛接到一個特殊的空模塊,以便在編譯時做任何我想做的事情,但這有點麻煩...... – l04m33
我最後使用了Makefile和bat方法,事實證明它不是那麼糟糕...... – l04m33