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.mllparser.mlytypes.mli et
types.mlmain.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