diff --git a/src/fr/monlouyan/bakefile/BakefileParser.java b/src/fr/monlouyan/bakefile/BakefileParser.java
index 40525b5..9cee36c 100644
--- a/src/fr/monlouyan/bakefile/BakefileParser.java
+++ b/src/fr/monlouyan/bakefile/BakefileParser.java
@@ -48,12 +48,6 @@ public class BakefileParser {
      */
     private static final Pattern PHONY_PATTERN = Pattern.compile("^\\.PHONY:\\s*([^#]*?)\\s*(?:#.*)?$");
 
-	/**
-	 * Regex pour détecter les lignes de continuation.
-	 * Format : "    gcc -o program program.c \"
-	 */
-    private static final Pattern CONTINUATION_PATTERN = Pattern.compile("^(.*)\\\\\\s*$");
-
 	/**
 	 * Regex pour détecter les références de variables.
 	 * Format : "${VAR}" ou "$(VAR)"
@@ -79,34 +73,6 @@ public class BakefileParser {
         firstTarget = null;
     }
 
-	/**
-	 * Gérer les lignes de continuation.
-	 * @param lines Liste des lignes du fichier Bakefile
-	 * @param startIndex Index de la première ligne de continuation
-	 * @return La ligne combinée
-	 */
-    private String handleContinuationLines(List<String> lines, int startIndex) {
-        StringBuilder combinedLine = new StringBuilder();
-        int i = startIndex;
-        
-        while (i < lines.size()) {
-            String line = lines.get(i);
-            Matcher contMatcher = CONTINUATION_PATTERN.matcher(line);
-            
-            if (contMatcher.matches()) {
-                // Ajouter la ligne sans le backslash
-                combinedLine.append(contMatcher.group(1).trim()).append(" ");
-                i++;
-            } else {
-                // Ajouter la dernière ligne et sortir
-                combinedLine.append(line.trim());
-                break;
-            }
-        }
-        
-        return combinedLine.toString();
-    }
-
 	/**
 	 * Remplacer les variables dans une chaîne.
 	 * @param input Chaîne à traiter
@@ -199,112 +165,150 @@ public class BakefileParser {
 	 * @return Liste des règles extraites
 	 */
     public List<Rule> parse() {
-        List<Rule> rules = new ArrayList<>();
-        Set<String> phonyTargets = new HashSet<>();
-    
-        if (!Files.exists(Paths.get(filename))) {
-            System.out.println("*** No targets specified and no makefile found.  Stop.");
-            System.exit(2);
-        }       
-    
-        try {
-            List<String> lines = Files.readAllLines(Paths.get(filename));
-            List<String> currentTargets = null;
-            List<String> dependencies = new ArrayList<>();
-            List<String> commands = new ArrayList<>();
-            
-            for (int i = 0; i < lines.size(); i++) {
-                String line = lines.get(i);
-                
-                // Vérifier si la ligne a un caractère de continuation
-                Matcher contMatcher = CONTINUATION_PATTERN.matcher(line);
-                if (contMatcher.matches()) {
-                    // Récupérer toute la définition multi-ligne
-                    line = handleContinuationLines(lines, i);
-                    // Ajuster i pour sauter les lignes traitées
-                    while (i + 1 < lines.size() && 
-                           CONTINUATION_PATTERN.matcher(lines.get(i)).matches()) {
-                        i++;
-                    }
-                }
-
-                if (line.trim().isEmpty()) {
-                    continue;
-                }
-
-                if (line.matches("^ +.*$")) {
-                    System.err.println(filename + ":" + (i+1) + ": *** missing separator.  Stop.");
-                    System.exit(2);
-                }
-                
-                Matcher varMatcher = VARIABLE_PATTERN.matcher(line);
-                Matcher targetMatcher = TARGET_PATTERN.matcher(line);
-                Matcher commandMatcher = COMMAND_PATTERN.matcher(line);
-                Matcher phonyMatcher = PHONY_PATTERN.matcher(line);
-                
-                if (phonyMatcher.matches()) {
-                    String[] phonies = phonyMatcher.group(1).trim().split("\\s+");
-                    Collections.addAll(phonyTargets, phonies);
-                    continue;
-                }
-                
-                if (varMatcher.matches()) {
-                    String varName = varMatcher.group(1);
-                    String varValue = varMatcher.group(2).trim();
-                    // Évaluer les variables référencées dans la valeur
-                    varValue = replaceVariables(varValue);
-                    variables.put(varName, varValue);
-                } else if (targetMatcher.matches()) {
-                    if (currentTargets != null) {
-                        // Créer une règle pour chaque cible avec les mêmes dépendances et commandes
-                        for (String target : currentTargets) {
-                            String resolvedTarget = replaceVariables(target.trim());
-                            rules.add(new Rule(
-                                resolvedTarget,
-                                splitDependencies(dependencies.stream()
-                                    .collect(Collectors.joining(" "))),
-                                replaceVariablesInList(commands),
-                                phonyTargets.contains(resolvedTarget)
-                            ));
-                            
-                            if (firstTarget == null) {
-                                firstTarget = resolvedTarget;
-                            }
-                        }
-                    }
-    
-                    String targetStr = targetMatcher.group(1);
-                    currentTargets = splitTargets(targetStr);
-                    String depStr = targetMatcher.group(2);
-                    dependencies = splitDependencies(depStr);
-                    commands = new ArrayList<>();
-                } else if (commandMatcher.matches()) {
-                    commands.add(commandMatcher.group(1));
-                }
-            }
-    
-            if (currentTargets != null) {
-                // Créer une règle pour chaque cible avec les mêmes dépendances et commandes
-                for (String target : currentTargets) {
-                    String resolvedTarget = replaceVariables(target.trim());
-                    rules.add(new Rule(
-                        resolvedTarget,
-                        replaceVariablesInList(dependencies),
-                        replaceVariablesInList(commands),
-                        phonyTargets.contains(resolvedTarget)
-                    ));
-                    
-                    if (firstTarget == null) {
-                        firstTarget = resolvedTarget;
-                    }
-                }
-            }
-    
-        } catch (IOException e) {
-            e.printStackTrace();
-        }
-        return rules;
-    }
+		List<Rule> rules = new ArrayList<>();
+		Set<String> phonyTargets = new HashSet<>();
+	
+		if (!Files.exists(Paths.get(filename))) {
+			System.out.println("*** No targets specified and no makefile found. Stop.");
+			System.exit(2);
+		}       
+	
+		try {
+			List<String> lines = Files.readAllLines(Paths.get(filename));
+			List<String> currentTargets = null;
+			List<String> dependencies = new ArrayList<>();
+			List<String> commands = new ArrayList<>();
+			boolean inContinuedCommand = false;
+			StringBuilder continuedCommand = new StringBuilder();
+			
+			for (int i = 0; i < lines.size(); i++) {
+				String line = lines.get(i).replace("\r", "");
+				
+				// Ignorer les lignes vides
+				if (line.trim().isEmpty()) {
+					continue;
+				}
+				
+				// Gérer les erreurs de format (espaces au lieu de tabulations)
+				if (line.matches("^ +.*$") && !inContinuedCommand) {
+					System.err.println(filename + ":" + (i+1) + ": *** missing separator. Stop.");
+					System.exit(2);
+				}
+				
+				// Si nous sommes en train de traiter une ligne continuée
+				if (inContinuedCommand) {
+					if (line.endsWith("\\")) {
+						// Encore une continuation
+						continuedCommand.append(" ").append(line.substring(0, line.length() - 1).trim());
+					} else {
+						// Fin de la continuation
+						continuedCommand.append(" ").append(line.trim());
+						commands.add(continuedCommand.toString().trim());
+						inContinuedCommand = false;
+						continuedCommand = new StringBuilder();
+					}
+					continue;
+				}
+				
+				// Matcher pour les déclarations .PHONY
+				Matcher phonyMatcher = PHONY_PATTERN.matcher(line);
+				if (phonyMatcher.matches()) {
+					String[] phonies = phonyMatcher.group(1).trim().split("\\s+");
+					Collections.addAll(phonyTargets, phonies);
+					continue;
+				}
+				
+				// Matcher pour les déclarations de variables
+				Matcher varMatcher = VARIABLE_PATTERN.matcher(line);
+				if (varMatcher.matches()) {
+					String varName = varMatcher.group(1);
+					String varValue = varMatcher.group(2).trim();
+					// Évaluer les variables référencées dans la valeur
+					varValue = replaceVariables(varValue);
+					variables.put(varName, varValue);
+					continue;
+				}
+				
+				// Matcher pour les cibles et dépendances
+				Matcher targetMatcher = TARGET_PATTERN.matcher(line);
+				if (targetMatcher.matches()) {
+					// Si nous avions des cibles précédentes, créons les règles correspondantes
+					if (currentTargets != null) {
+						// Créer une règle pour chaque cible avec les mêmes dépendances et commandes
+						for (String target : currentTargets) {
+							String resolvedTarget = replaceVariables(target.trim());
+							rules.add(new Rule(
+								resolvedTarget,
+								replaceVariablesInList(dependencies),
+								replaceVariablesInList(commands),
+								phonyTargets.contains(resolvedTarget)
+							));
+							
+							if (firstTarget == null) {
+								firstTarget = resolvedTarget;
+							}
+						}
+					}
+					
+					// Configuration pour les nouvelles cibles
+					String targetStr = targetMatcher.group(1);
+					currentTargets = splitTargets(targetStr);
+					
+					String depStr = targetMatcher.group(2);
+					dependencies = splitDependencies(depStr);
+					commands = new ArrayList<>();
+					continue;
+				}
+				
+				// Matcher pour les lignes de commande
+				Matcher commandMatcher = COMMAND_PATTERN.matcher(line);
+				if (commandMatcher.matches()) {
+					String command = commandMatcher.group(1);
+					
+					// Gérer la continuation de ligne
+					if (command.endsWith("\\")) {
+						inContinuedCommand = true;
+						continuedCommand = new StringBuilder(command.substring(0, command.length() - 1).trim());
+					} else {
+						commands.add(command);
+					}
+				}
+			}
+			
+			// Traiter les dernières cibles
+			if (currentTargets != null) {
+				// Créer une règle pour chaque cible avec les mêmes dépendances et commandes
+				for (String target : currentTargets) {
+					String resolvedTarget = replaceVariables(target.trim());
+					rules.add(new Rule(
+						resolvedTarget,
+						replaceVariablesInList(dependencies),
+						replaceVariablesInList(commands),
+						phonyTargets.contains(resolvedTarget)
+					));
+					
+					if (firstTarget == null) {
+						firstTarget = resolvedTarget;
+					}
+				}
+			}
+			
+			if (BakeCLI.isDebug()) {
+				System.out.println("Debug: Parsed " + rules.size() + " rules.");
+				for (Rule rule : rules) {
+					System.out.println("Debug: Rule: " + rule.getName());
+					System.out.println("Debug:   Commands: " + rule.getCommands().size());
+					for (String cmd : rule.getCommands()) {
+						System.out.println("Debug:     [" + cmd + "]");
+					}
+				}
+			}
+			
+		} catch (IOException e) {
+			e.printStackTrace();
+		}
+		return rules;
+	}
 
 	/**
 	 * Récupérer la première cible