Bonjour tout le monde,
Je tente de créer un Makefile relativement complexe. Parmis ses "fonctionnalités", celles de colorer les sorties de GCC via substitutions sed.
Au final j'obtiens quelquechose comme ceci :
Je vous épargne les chaines regexp de sed car elles sont longues et se fabriquent avec des variables make de partout donc... ce serait assombrir l'exemple inutilement.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 g++ -c $< -o $@ 2>&1 | sed -e 's/un_pattern_obscur/une_chaine_non_moins_obscure/'
Bref cela marche très bien.
Pourquoi 2>&1 | pour rediriger vers sed ? Parceque les warns et errors de gcc vont dans stderr. Donc je rebalance stderr dans stdout pour que sed puisse lire.
Seulement voilà, cette instruction dans un Makefile fait son office, mais Make se base sur la valeur de retour d'un programme pour savoir si le process s'est bien exécuté.
Hors ici, la valeur de retour de cette ligne n'est pas celle de g++, mais de sed...
Résultat : si un fichier n'est pas compilé, make continuera son affaire, arrivera au link et, partant du faux principe qu'il n'a rencontré aucune erreur, tentera en vain ce link...
Je cherche là, mais pas d'idée. Existe-t-il un moyen de spécifier que la valeur de retour à prendre en compte est celle de g++ (pas une instruction Make forcément)... ou autre chose ?
Merci de m'aider
/Oragon Efreet
Partager