Makefile
dans le répertoire où réside votre programme.
Makefile
doit être écrit dans le répertoire
où réside les sources de votre programme.camllex
et
camlyacc
, liste des fichiers source Caml et des fichiers
objets à créer)..depend
(touch .depend
). Vide au départ, ce fichier contiendra la
liste des dépendances de compilation entre les fichiers des modules de
votre programme, calculées automatiquement par la commande make
depend
.make
. Recommencer à chaque nouvelle
modification de l'un des fichiers du programme.
Plus précisément, ce fichier Makefile
vous offre les
«entrées» suivantes:
make
reconstruit le programme exécutable.make depend
recalcule les dépendances entre
les modules du programme et donc recalcule l'ordre dans lequel il
faut compiler les fichiers.make clean
supprime les fichiers compilés
et le programme exécutable.make all
recalcule les dépendances et
recompile le programme.make clean; make all
recompile
entièrement tous les modules du programme et recrée l'exécutable.
L'idéal est d'utiliser make
avec l'éditeur
emacs
: on appelle make
avec la commande
emacs Meta-X compile
. S'il se produit une erreur à la
compilation, l'éditeur se positionnera automatiquement sur la ligne
signalée par le compilateur Caml, en ouvrant le fichier correspondant
Meta-X next-error
. La commande Meta-X
compile
est généralement liée à la combinaison de touche
CTRL-C CTRL-C
, tandis que Meta-X next-error
est lié à CTRL-X `
.
Ce qui signifie qu'on recompile le programme et positionne le curseur
sur l'erreur détectée en 4 appuis de touches.
Le Makefile
suppose que le programme exécutable se nomme
exc
et qu'il est composé de:
lexer.mll
parser.mly
types.mli
et
types.ml
main.ml
# The Caml compilers. You may have to add various -I options. CAMLC = camlc -W CAMLDEP = camldep CAMLLEX = camllex CAMLYACC = camlyacc # Name of executable file to generate EXEC = exc # Handling camllex files LEXSOURCES = lexer.mll LEXGENERATED = lexer.mli lexer.ml # Handling camlyacc files YACCSOURCES = parser.mly YACCGENERATED = parser.mli parser.ml # Files generated by camllex and camlyacc GENERATED = $(LEXGENERATED) $(YACCGENERATED) # The Caml sources to compile SOURCES = types.mli types.ml main.ml $(GENERATED) # The list of compiled files to link OBJS = types.zo lexer.zo parser.zo main.zo # This part should be generic # Don't forget to create (touch) the file ./.depend at first use. # Building the world all: depend $(EXEC) $(EXEC): $(GENERATED) $(OBJS) $(CAMLC) $(OBJS) -o $(EXEC) .SUFFIXES: .SUFFIXES: .ml .mli .zo .zi .zix .SUFFIXES: .mll .mly .ml.zo: $(CAMLC) -c $< .mli.zi: $(CAMLC) -c $< .mll.ml: $(CAMLLEX) $< .mly.ml: $(CAMLYACC) $< # Clean up clean: rm -f *.z[io] *.zix *~ .*~ #*# rm -f $(GENERATED) rm -f $(EXEC) # Dependencies depend: $(SOURCES) $(GENERATED) $(LEXSOURCES) $(YACCSOURCES) $(CAMLDEP) *.mli *.ml > .depend include .depend
Contacter l'auteur Pierre.Weis@inria.fr