# If the first argument is "jeu"... ifeq (jeu,$(firstword $(MAKECMDGOALS))) # use the rest as arguments for "jeu" RUN_ARGS := $(wordlist 2,$(words $(MAKECMDGOALS)),$(MAKECMDGOALS)) # ...and turn them into do-nothing targets $(eval $(RUN_ARGS):;@:) endif # If the first argument is "creation"... ifeq (creation,$(firstword $(MAKECMDGOALS))) # use the rest as arguments for "creation" CREATION_ARGS := $(wordlist 2,$(words $(MAKECMDGOALS)),$(MAKECMDGOALS)) # ...and turn them into do-nothing targets $(eval $(CREATION_ARGS):;@:) endif ### VARIABLES ### JC = javac JCFLAGS = -encoding UTF-8 -implicit:none JVM = java JVMFLAGS = SRCDIR = ./src OUTDIR = ./out DOCDIR = ./doc ### LISTE DES FICHIERS SOURCE ### SRCFILES := $(wildcard $(SRCDIR)/*.java) ### LISTE DES FICHIERS OBJET ### CLASSFILES := $(patsubst $(SRCDIR)/%.java,$(OUTDIR)/%.class,$(SRCFILES)) ### REGLES ESSENTIELLES ### # Compilation de tous les fichiers source $(OUTDIR)/%.class : $(SRCDIR)/%.java | $(OUTDIR) @mkdir -p $(OUTDIR) $(JC) $(JCFLAGS) -cp $(SRCDIR) -d $(OUTDIR) $< # Crée le répertoire de sortie s'il n'existe pas $(OUTDIR): mkdir -p $(OUTDIR) # La classe MainJeu dépend de tous les fichiers compilés $(OUTDIR)/MainJeu.class : $(CLASSFILES) # La classe MainCreation dépend de tous les fichiers compilés $(OUTDIR)/MainCreation.class : $(CLASSFILES) ### REGLES OPTIONNELLES ### # Règle pour lancer le programme MainJeu jeu : $(OUTDIR)/MainJeu.class $(JVM) $(JVMFLAGS) -cp $(OUTDIR) MainJeu $(RUN_ARGS) # Règle pour lancer le programme MainCreation creation : $(OUTDIR)/MainCreation.class $(JVM) $(JVMFLAGS) -cp $(OUTDIR) MainCreation $(CREATION_ARGS) # Nettoyage des fichiers générés clean : -rm -rf $(OUTDIR) -rm -rf $(DOCDIR) # Nettoyage et suppression des fichiers générés, y compris la classe Main mrproper : clean # Génération de la documentation doc : javadoc -d $(DOCDIR) $(SRCDIR)/*.java ### BUTS FACTICES ### .PHONY : jeu creation clean mrproper doc ### FIN ###