初めての Erlang プロジェクトを作成しました。シンプルな暗証番号ゲームです。私はOTPを絶対に避けようとしています.OTPは本当に混乱しているように見えます.
3 つのフォルダーがあります: ebin src test
Makefile を使用してすべてのコードをコンパイルし、テストを実行します。
人生は今夜まで良いです...
ゲームの入力 (および出力?) を模擬するために、Meck を使用することをお勧めしましたが、プロジェクトに統合するのに非常に苦労しています。
手動でインストールしてみました。Meck の git clone を行いました。Meck ディレクトリの eBin フォルダに「cd」してコンパイルし、すべてのシステム テストを実行して、基本的なコマンド「meck:new(dog)」を実行します。素晴らしい!
今、私は自分のプロジェクトで Meck を動作させる必要があります... Github Meck の readme で次の行を読みました:リリース フォルダを作成し、そのフォルダが ERL_LIBS 環境変数にあることを確認してください。」
しかし、Erland のコード パスに ebin ディレクトリを追加する方法がわかりません。リリース フォルダーがなく (これは鉄則だと思いますか?)、ERL_LIBS 環境変数を追加する方法もわかりません。 . だから私は立ち往生しています。
私が試したことは次のとおりです: コード パスに ebin ディレクトリを追加するために、makefile でこれを行いました (現在、デスクトップに meck ディレクトリがあります)。
erlc -pa ~/Desktop/meck/ebin/
そして、次のように ERL_LIBS を .bash_profile に追加しました。
export ERL_LIBS='~/Desktop/meck/ebin/'
Agnerもインストールしようとしましたが、インストール時にエラーが発生しました:
ERROR: compile failed while processing /private/tmp/agner.0r04Vm: {'EXIT',
{undef,
[{rebar,get_jobs,
[{config,"/private/tmp/agner.0r04Vm",
[{require_otp_vsn,"R14|R15"},
{lib_dirs,["deps"]},
{escript_incl_apps,
[getopt,gproc,rebar,plists,gen_fsm2,jsx]},
{erl_opts,[{i,"deps"}]},
{plugins,[agner_rebar_plugin]},
local]}],
[]},
{rebar_base_compiler,run,4,
[{file,"src/rebar_base_compiler.erl"},{line,49}]},
{rebar_erlc_compiler,doterl_compile,3,
[{file,"src/rebar_erlc_compiler.erl"},{line,157}]},
{rebar_core,run_modules,4,[{file,"src/rebar_core.erl"},{line,420}]},
{rebar_core,execute,4,[{file,"src/rebar_core.erl"},{line,354}]},
{rebar_core,process_dir0,6,[{file,"src/rebar_core.erl"},{line,217}]},
{rebar_core,process_dir,4,[{file,"src/rebar_core.erl"},{line,128}]},
{rebar_core,process_commands,2,
[{file,"src/rebar_core.erl"},{line,83}]}]}}
make: *** [compile] Error 1
誰でも助けることができますか?試してみるべきいくつかのオプションがあったように感じますが、どれも機能していません。
アップデート:
@d11wtqのソリューションを読んだ後の私のmakeファイルは次のようになります。
.SUFFIXES: .erl .beam .yrl
.erl.beam:
erlc -W $<
.yrl.erl:
erlc -W $<
ERL = erl -boot start_clean
MODS = console_io feedback mastermind secret_code meck
all: compile path run_test
compile:
erlc -o ebin/ src/*.erl
erlc -o ebin/ test/*.erl
path:
erlc -pa ebin/
-env ERL_LIBS deps/
run_test:
erl -noshell -pa ebin \
-eval 'eunit:test("ebin").' \
-eval 'mastermind:start_game().' \
-s init stop
clean:
rm -rf ebin/*.beam
rm -rf erl_crash.dump
最終更新:
ヒントに基づいて、これが現在機能する最終的なメイクファイルです。
all: compile run_test run_game
compile:
erlc -o ebin/ src/*.erl
erlc -o ebin/ test/*.erl
run_test:
erl -pa ebin \
-env ERL_LIBS deps/ \
-eval 'eunit:test("ebin").' \
-s init stop
run_game:
erl -pa ebin \
-env ERL_LIBS deps/ \
-eval "mastermind:start_game()." \
-s init stop
clean:
rm -rf ebin/*.beam
rm -rf erl_crash.dump