SAE21_2023/Makefile
2024-05-02 17:53:25 +02:00

80 lines
2.0 KiB
Makefile

# 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 ###