2010-08-21 6 views
0

J'espère que tout le monde va bienErlang - Makefiles

J'ai un problème avec les fichiers make dans erlang sur windows. Je n'arrive pas à obtenir le code suivant pour fonctionner.

.SUFFIXES: .erl .beam 

.erl.beam: 
    erlc -W $< 

    ERL = erl -boot start_clean 

MODS = main send get loops 

all: compile 
    ${ERL} -pa 'G:\Documents and Settings\Administrador' -s main start 

compile: ${MODS:%=%.beam} 

clean: 
    rm -rf *.beam erl_crash.dump 

Les fichiers que je suis en train de compiler sont main.erl send.erl get.erl loops.erl

j'enregistre le fichier makefile comme un .exe

Et le type

make [main] 

dans les fenêtres shell

Tout cela me donne une erreur popup wierd. La commande make [main] est-elle correcte? Et mon code actuel est-il exact?

Merci pour l'aide, -B

Répondre

6

Plusieurs erreurs ici:

  1. La ligne dentelée "ERL =" ne fonctionnera pas droite. Les onglets principaux sont spéciaux à faire. Vous n'avez pas la liberté de mise en forme complète, comme avec d'autres langues.

  2. Le fichier make doit être enregistré sous la forme Makefile, sans extension. Le cas peut ou peut ne pas importer à votre "make" programme particulier. Cependant, toutes les versions de make acceptent Makefile.

  3. Les crochets de votre ligne de commande ne fonctionneront jamais. Je suppose que vous les coupez et que vous les collez quelque part, mais ils utilisaient probablement "[main]" comme exemple de texte que vous êtes censé remplacer, y compris les crochets. "Make main" échouera également parce que vous n'avez pas de cible "principale" dans ce Makefile

  4. "make all", "make clean" et "make compile" fonctionneront, tout comme plusieurs cibles implicites, comme "make loops.beam".

    Vous devriez vraiment obtenir un livre sur la marque, si vous allez continuer à l'utiliser. J'aime le Managing Projects with GNU Make, 3/e de O'Reilly par Mecklenburg, disponible gratuitement en ligne ou sous forme d'arbre mort. Le manuel GNU make est également disponible online et dead trees.

  5. Vous ne devriez probablement pas utiliser le "make" traditionnel ici, cependant. Pour les projets purement Erlang, Emakefiles sont plus courts, plus clairs et mieux globalement meilleurs. Ils ne sont pas géniaux pour construire d'autres choses à côté de votre projet Erlang, mais vous pouvez toujours faire les deux: le Makefile utilise "erl -make" pour lancer la construction d'Erlang, et fait tout le reste lui-même.

+0

J'apprécie la réponse, mais il n'a pas vraiment répondu à ma question, juste faites-moi savoir ce qui était faux. Est-ce vraiment difficile d'écrire un makefile simple dont j'ai besoin pour lire un livre ?? – BAR

+4

Vous avez demandé ce qui n'allait pas avec votre fichier, je vous l'ai dit. Et oui, Makefiles sont suffisamment complexes que vous voulez avoir un livre sur le sujet. Celui que j'ai recommandé est court, comme le font les livres techniques. Notez également que je l'ai recommandé avec une réserve, en disant que vous ne devriez obtenir le livre si vous allez continuer à utiliser Makefiles. S'il s'agit d'une offre unique, ne construisant rien de plus que ce que nous voyons ici, construisez un Emakefile à la place. Mais ce serait une question différente, sans égard à savoir si celui-ci est répondu correctement. –

1

Votre code actuel semble plus ou moins correct. Vous devez supprimer l'indentation pour la ligne commençant par ERL, et assurez-vous que toutes les lignes indentées ont une TAB (pas SPACE) au début. (À moins que vous n'ayez une version localisée de Windows, vous devez également vérifier l'orthographe de l'administrateur.)

Le nom de votre fichier Makefile doit être Makefile (sans aucun type de fichier), et vous devez l'exécuter avec make . Le simple fait d'écrire make dans la ligne de commande exécutera la commande make la plus haute (qui dans votre cas est 'all').Si vous voulez exécuter l'une des autres commandes (ou toutes explicitement), ajoutez simplement cela à votre commande make, comme "make clean", "make foo.beam".

Pensez également à mettre vos fichiers sources dans src/et vos fichiers compilés dans ebin/puisque c'est le standard Erlang.

Je recommande cette page pour plus d'informations sur make (si vous utilisez GNU Make): http://www.gnu.org/software/make/manual/make.html