J'ai créé mon premier projet Erlang. C'est un jeu de code secret simple. J'essaie d'éviter OTP à tout prix car il semble vraiment déroutant et mon mentor a pensé qu'il n'était pas nécessaire de l'utiliser pour cette remise des gaz.Comment installer meck avec mon projet Erlang?
J'ai trois dossiers: Ebin src essai
J'utilise un makefile pour compiler tout le code et des tests.
La vie est bonne jusqu'à ce soir ...
Pour se moquer de mon entrée (et les sorties?) Pour le jeu, il a été recommandé que j'utilise Meck, mais je vais avoir une période très difficile l'intégrer dans mon projet.
J'ai essayé d'installer manuellement. J'ai fait un clone git de Meck. Je peux "cd" dans le dossier eBin dans le répertoire Meck et compiler, exécuter tous les tests du système, et exécuter une commande de base "meck: new (dog)". Impressionnant!
Maintenant, j'ai besoin que Meck travaille avec mon projet ... J'ai lu cette ligne dans le readme de Github Meck: "Si vous voulez installer votre propre version de meck, ajoutez le répertoire ebin à votre chemin de code Erlang ou déplacez le dossier meck dans votre dossier de version et assurez-vous que ce dossier se trouve dans votre variable d'environnement ERL_LIBS. "
Mais je ne peux pas comprendre comment ajouter le répertoire ebin à mon chemin de code Erland, je n'ai pas de dossier de version (c'est une chose de rebar je pense?) Et je ne sais pas comment ajouter une variable d'environnement ERL_LIBS. Donc je suis coincé.
Voici ce que j'ai essayé: Pour ajouter le répertoire ebin à mon chemin de code, je l'ai fait dans mon makefile (je le répertoire meck assis sur mon bureau en ce moment):
erlc -pa ~/Desktop/meck/ebin/
Et J'ai ajouté le ERL_LIBS à mes .bash_profile comme ceci:
export ERL_LIBS='~/Desktop/meck/ebin/'
J'ai aussi essayé d'installer Agner et des erreurs quand installer:
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
Quelqu'un peut-il aider? Je me sens comme il y avait plusieurs options pour moi d'essayer et aucun d'entre eux ne fonctionne.
Mise à jour:
Voici ce que mon fichier make ressemble après avoir lu @ solution de d11wtq:
.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
Mise à jour finale:
Sur la base des conseils, voici ma dernière makefile qui fonctionne maintenant.
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
Merci beaucoup pour votre aide! J'ai ajouté le dossier deps/meck et ajouté la ligne ERL_LIBS à mon makefile. Je pense que je dois encore ajouter quelque chose à ma ligne MODS ci-dessus? Il y a 4 fichiers dans le dossier src: meck.app.src, meck.erl, meck_abstract.hrl et meck_mod.erl. Est-ce que je les ajoute à la ligne MODS? En outre, lorsque je l'exécute actuellement, j'obtiens cette erreur: env: ERL_LIBS: Aucun fichier ou répertoire make: [path] Erreur 127 (ignoré) – Kelly
Ne confondez pas 'erlc' avec' erl'. L'indicateur '-env' est utilisé par la machine virtuelle Erlang, mais pas par le compilateur. Les libs n'ont pas besoin d'être liés au moment de la compilation, donc même si votre code référence des modules qui n'existent pas, le compilateur ne vous en parlera pas. Vous découvrirez à l'exécution. Maintenant, puisque vous utilisez des barres d'armature, pourquoi ne pas simplement installer meck en l'ajoutant à votre rebar.config et en utilisant 'rebar get-deps' et' rebar compile'? https://github.com/basho/rebar/wiki/Dependency-management. – d11wtq
Merci beaucoup pour le conseil sur erl vs. erlc! Je me suis rendu compte après avoir lu votre note que je ne savais vraiment pas ce que faisaient ces lignes dans mon makefile. Je suis retourné lire la documentation et cette fois j'ai compris la documentation beaucoup plus facilement après avoir lu vos conseils ci-dessus. J'ai inséré ma question avec une version finale de mon makefile qui fonctionne maintenant avec meck. Merci encore! (De plus, j'essayais d'éviter les barres d'armature à ce stade du jeu. Je suis encore en train d'apprendre Erlang et mon devoir est dû demain, donc je n'étais pas prêt à apprendre les barres d'armature.) – Kelly