Question

J'ai un Makefile qui construit de nombreux fichiers C avec de longues lignes de commande et nous avons nettoyé le résultat en appliquant des règles telles que:

.c${MT}.doj:

        @echo "Compiling $<";\
         $(COMPILER) $(COPTS) -c -o $@ $<

Maintenant, c’est formidable, car le @ supprime la ligne de compilation émise. Mais lorsque nous obtenons une erreur, tout ce que nous obtenons est le message d'erreur, pas de ligne de commande. Quelqu'un peut-il penser à un & "Neat &"; moyen d'émettre la ligne de commande? Tout ce que je peux penser, c’est d’en faire écho dans un fichier et d’avoir un niveau plus élevé, attraper l’erreur et chatter le fichier. Hacky je sais.

Était-ce utile?

La solution

Testé et cela a fonctionné (fabrication GNU sous Linux):

.c${MT}.doj:
     @echo "Compiling $<";\
          $(COMPILER) $(COPTS) -c -o $@ $<  \
          || echo "Error in command: $(COMPILER) $(COPTS) -c -o $@ $<" \
          && false

Autres conseils

Cette question est assez ancienne, mais pour ceux d'entre vous qui surfent sur Google, je pense que ce que je & # 8217; vais faire dans cette situation est un alias make à make -s (mode silencieux) dans mon shell, et seulement mettez le préfixe @ avant les lignes où echo ou d’autres commandes de diagnostic sont appelées. Lorsque je veux la sortie complète de \make, je remplace mon alias en l'appelant @echo.

Notez également que dans cette situation, vous & # 8217; devrez faire ce qui est typique et mettre le <=> sur sa propre ligne, avec les commandes de règle réelles sur des lignes séparées et sans <=> # 8217; s.

Une solution simple consisterait à utiliser un script simple abc comme suit:

#!/bin/bash

$@
code=$?
if (( code )); then
  echo error running $@
fi
exit $code

Ensuite, vous pouvez écrire abc $(COMPILER) $(COPTS) -c -o $@ $< dans votre Makefile. Notez que cela ne fonctionne pas lorsque vous avez des tubes ou des redirections (car ils seront appliqués à <=> au lieu de la commande que vous souhaitez exécuter).

Vous pouvez également simplement insérer un code similaire directement dans <=> si cela est préférable.

J'ai récemment utilisé un utilitaire appelé logtext pour suivre l'évolution de la sortie. le déroulement d'un fichier chauve-souris en cours d'exécution. Regardez-la, vous trouverez peut-être cela très utile si vous voulez savoir quelle erreur s'est produite où.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top