IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Linux Discussion :

[Bash][GNU Make] Make ne détecte plus l'erreur de g++ à cause de SED


Sujet :

Linux

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Août 2009
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France, Doubs (Franche Comté)

    Informations forums :
    Inscription : Août 2009
    Messages : 32
    Points : 30
    Points
    30
    Par défaut [Bash][GNU Make] Make ne détecte plus l'erreur de g++ à cause de SED
    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 :
    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/'
    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.

    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

  2. #2
    Membre émérite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2008
    Messages
    1 515
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 515
    Points : 2 505
    Points
    2 505
    Par défaut
    Si tu es en bash (ou autre shell "évolué"), tu peux regarder du côté du tableau PIPESTATUS ou de l'option pipefail.

  3. #3
    Membre émérite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2008
    Messages
    1 515
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 515
    Points : 2 505
    Points
    2 505
    Par défaut
    Et si tu veux quelque chose de POSIX, malheureusement la solution n'est pas simple. Tu peux faire quelque chose comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ( exit `{ { command_1; echo $? >&3; } | command_2; } 3>&1 >&4`; ) 4>&1

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    290
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 290
    Points : 426
    Points
    426
    Par défaut
    Bonjour,

    Pour ne pas garder un makefile propre et encapsuler votre coloration syntaxique dans un script qui appellera make ? Vous êtes en train d'alourdir et de diminuer la lisibilité sur un code dont le but premier est de faire le build de votre application à des fins esthétiques.

Discussions similaires

  1. Visual Studio 2013 web ne détecte plus mes namespace
    Par BastienCil dans le forum Visual Studio
    Réponses: 3
    Dernier message: 21/06/2017, 13h56
  2. Windows ne détecte plus mon Nexus 10
    Par BastienCil dans le forum Windows 8
    Réponses: 1
    Dernier message: 14/03/2014, 18h33
  3. Windows ne détecte plus aucun réseau sans fil : erreur 1068
    Par Jean001 dans le forum Windows Vista
    Réponses: 1
    Dernier message: 06/07/2010, 11h23
  4. Make Make install
    Par medben dans le forum Applications et environnements graphiques
    Réponses: 4
    Dernier message: 26/09/2007, 15h30
  5. Plus aucune erreur à l'exécution
    Par delphi5user dans le forum Langage
    Réponses: 1
    Dernier message: 30/09/2005, 13h05

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo