diff --git a/Makefile b/Makefile
index 1c7b233..dcee5ab 100644
--- a/Makefile
+++ b/Makefile
@@ -30,7 +30,7 @@ RULE_SRC = $(SOURCEDIR)fr/monlouyan/bakefile/Rule.java
 MAIN_SRC = $(SOURCEDIR)fr/monlouyan/bakefile/Main.java
 
 # Cible principale
-all: init $(JARNAME) deploy-tests
+all: init $(MAIN_CLASS) $(JARNAME) deploy-tests
 
 # Initialiser les répertoires nécessaires
 init:
@@ -39,59 +39,37 @@ init:
 	@mkdir -p $(BUILDDIR)fr/monlouyan/bakefile/
 	@echo "Répertoires créés."
 
-# ---- Phase 1: Compilation des classes sans dépendances circulaires ----
-phase1: init $(BAKECLI_CLASS) $(TIMESTAMPMANAGER_CLASS)
+$(MAIN_CLASS): $(MAIN_SRC) $(BAKECLI_CLASS) $(BAKEENGINE_CLASS)
+	@echo "Compilation de $(MAIN_SRC)..."
+	@javac -cp $(CLASSP) -d $(BUILDDIR) $(MAIN_SRC) -Xlint:unchecked -Xlint:deprecation -sourcepath src
 
-$(BAKECLI_CLASS): $(BAKECLI_SRC)
-	@echo "Compilation de BakeCLI.java..."
-	@javac -cp $(CLASSP) -d $(BUILDDIR) $< -Xlint:unchecked -Xlint:deprecation
+$(RULE_CLASS): $(RULE_SRC) $(BAKECLI_CLASS)
+	@echo "Compilation de $(RULE_SRC)..."
+	@javac -cp $(CLASSP) -d $(BUILDDIR) $(RULE_SRC) -Xlint:unchecked -Xlint:deprecation -sourcepath src
 
 $(TIMESTAMPMANAGER_CLASS): $(TIMESTAMPMANAGER_SRC)
-	@echo "Compilation de TimestampManager.java..."
-	@javac -cp $(CLASSP) -d $(BUILDDIR) $< -Xlint:unchecked -Xlint:deprecation
+	@echo "Compilation de $(TIMESTAMPMANAGER_SRC)..."
+	@javac -cp $(CLASSP) -d $(BUILDDIR) $(TIMESTAMPMANAGER_SRC) -Xlint:unchecked -Xlint:deprecation -sourcepath src
 
-# ---- Phase 2: Création de stubs pour gérer les dépendances circulaires ----
-STUBS_DIR = $(BUILDDIR)stubs/fr/monlouyan/bakefile/
-RULE_STUB = $(STUBS_DIR)Rule.java
-BAKEENGINE_STUB = $(STUBS_DIR)BakeEngine.java
+$(DEPENDENCYRESOLVER_CLASS): $(DEPENDENCYRESOLVER_SRC) $(RULE_CLASS)
+	@echo "Compilation de $(DEPENDENCYRESOLVER_SRC)..."
+	@javac -cp $(CLASSP) -d $(BUILDDIR) $(DEPENDENCYRESOLVER_SRC) -Xlint:unchecked -Xlint:deprecation -sourcepath src
 
-stubs: phase1
-	@echo "Création des stubs pour les classes avec dépendances circulaires..."
-	@mkdir -p $(STUBS_DIR)
-	@echo "package fr.monlouyan.bakefile; public class Rule { private String name; private java.util.List<String> dependencies; private java.util.List<String> commands; private boolean isPhony; public Rule(String name, java.util.List<String> dependencies, java.util.List<String> commands, boolean isPhony) { this.name = name; this.dependencies = dependencies; this.commands = commands; this.isPhony = isPhony; } public String getName() { return name; } public java.util.List<String> getDependencies() { return dependencies; } public java.util.List<String> getCommands() { return commands; } public boolean isPhony() { return isPhony; } public boolean needsUpdate() { return false; } public boolean isEmpty() { return dependencies.isEmpty() && commands.isEmpty(); } }" > $(RULE_STUB)
-	@echo "package fr.monlouyan.bakefile; public class BakeEngine { public void run() {} public static boolean hasRule(String target) { return false; } public static Rule getRule(String target) { return null; } }" > $(BAKEENGINE_STUB)
-	@javac -cp $(CLASSP) -d $(BUILDDIR) $(STUBS_DIR)*.java
-	@echo "Stubs créés."
+$(COMMANDEXECUTOR_CLASS): $(COMMANDEXECUTOR_SRC) $(RULE_CLASS) $(TIMESTAMPMANAGER_CLASS)
+	@echo "Compilation de $(COMMANDEXECUTOR_SRC)..."
+	@javac -cp $(CLASSP) -d $(BUILDDIR) $(COMMANDEXECUTOR_SRC) -Xlint:unchecked -Xlint:deprecation -sourcepath src
 
-# ---- Phase 3: Compilation des classes avec stubs pour résoudre les dépendances circulaires ----
-phase3: stubs $(BAKEFILEPARSER_CLASS) $(DEPENDENCYRESOLVER_CLASS) $(COMMANDEXECUTOR_CLASS)
+$(BAKEFILEPARSER_CLASS): $(BAKEFILEPARSER_SRC) $(RULE_CLASS)
+	@echo "Compilation de $(BAKEFILEPARSER_SRC)..."
+	@javac -cp $(CLASSP) -d $(BUILDDIR) $(BAKEFILEPARSER_SRC) -Xlint:unchecked -Xlint:deprecation -sourcepath src
 
-$(BAKEFILEPARSER_CLASS): $(BAKEFILEPARSER_SRC)
-	@echo "Compilation de BakefileParser.java avec stubs..."
-	@javac -cp $(CLASSP) -d $(BUILDDIR) $< -Xlint:unchecked -Xlint:deprecation
+$(BAKEENGINE_CLASS): $(BAKEENGINE_SRC) $(BAKEFILEPARSER_CLASS) $(DEPENDENCYRESOLVER_CLASS) $(COMMANDEXECUTOR_CLASS) $(RULE_CLASS) $(BAKECLI_CLASS)
+	@echo "Compilation de $(BAKEENGINE_SRC)..."
+	@javac -cp $(CLASSP) -d $(BUILDDIR) $(BAKEENGINE_SRC) -Xlint:unchecked -Xlint:deprecation -sourcepath src
 
-$(DEPENDENCYRESOLVER_CLASS): $(DEPENDENCYRESOLVER_SRC)
-	@echo "Compilation de DependencyResolver.java avec stubs..."
-	@javac -cp $(CLASSP) -d $(BUILDDIR) $< -Xlint:unchecked -Xlint:deprecation
-
-$(COMMANDEXECUTOR_CLASS): $(COMMANDEXECUTOR_SRC)
-	@echo "Compilation de CommandExecutor.java avec stubs..."
-	@javac -cp $(CLASSP) -d $(BUILDDIR) $< -Xlint:unchecked -Xlint:deprecation
-
-# ---- Phase 4: Compilation finale des classes avec dépendances circulaires ----
-phase4: phase3 $(BAKEENGINE_CLASS) $(RULE_CLASS) $(MAIN_CLASS)
-
-$(BAKEENGINE_CLASS): $(BAKEENGINE_SRC)
-	@echo "Compilation finale de BakeEngine.java..."
-	@javac -cp $(CLASSP) -d $(BUILDDIR) $< -Xlint:unchecked -Xlint:deprecation
-
-$(RULE_CLASS): $(RULE_SRC)
-	@echo "Compilation finale de Rule.java..."
-	@javac -cp $(CLASSP) -d $(BUILDDIR) $< -Xlint:unchecked -Xlint:deprecation
-
-$(MAIN_CLASS): $(MAIN_SRC)
-	@echo "Compilation de Main.java..."
-	@javac -cp $(CLASSP) -d $(BUILDDIR) $< -Xlint:unchecked -Xlint:deprecation
+$(BAKECLI_CLASS): $(BAKECLI_SRC)
+	@echo "Compilation de $(BAKECLI_SRC)..."
+	@javac -cp $(CLASSP) -d $(BUILDDIR) $(BAKECLI_SRC) -Xlint:unchecked -Xlint:deprecation -sourcepath src
 
 # Création du fichier JAR (dépend de phase4 pour s'assurer que tout est compilé)
 $(JARNAME): phase4