Supprimer des messages en faire propre (Makefile silencieux supprimer)
Je me demande comment je peux éviter un certain écho dans un Makefile :
clean:
rm -fr *.o
cette règle d'impression:
$>make clean
rm -fr *.o
$>
Comment puis-je l'éviter?
Vous devez vous connecter pour publier un commentaire.
Pour commencer: la commande doit être sur la ligne suivante (ou du moins c'est le cas avec GNU Make, il pourrait être différent avec d'autres Faire - je ne suis pas sûr de ça)
(remarque, vous avez besoin d'un TAB avant
rm -rf *.o
comme dans chaque règle)Rendant silencieux peut être fait par la préfixation d'un
@
:de sorte que votre makefile devient
Si il n'y a pas
*.o
fichiers à supprimer, vous pouvez toujours retrouver avec un message d'erreur. Pour les supprimer, ajouter le suivant2>/dev/null
tuyaux de message d'erreur vers /dev/null - de sorte que vous ne verrez pas toutes les erreurs-
en face de la commande permet de s'assurer quemake
ignore un retour non nul code@
dans vos commandes.-
et la|| true
ensemble sont de trop - soit l'un d'entre eux devrait suffire. Vous avez besoin de l'un d'eux pour éviter de Gnu Make de cesser de fumer si il n'y a rien à supprimer. Mieux aurait été d'utiliserrm -f *.o
, depuis, ne retourne pas une erreur si il n'y a rien à supprimer.En fait je cherchais quelque chose d'autre, ajoutant cette ligne dans le fichier Makefile :
tout exécuter à chaque étape de la "nettoyer" la cible en silence.
Jusqu'à ce qu'un point de quelque inconvénient à cela, j'utilise ce que ma solution préférée!
Je suis de répondre à ce vieux sujet car il s'agit bien haut dans la recherche et les réponses sont confuses. Pour faire exactement ce que veut l'utilisateur,tout ce qui est nécessaire est:
L' @ signifie que ferez l'écho de cette commande.
Le
-f
argumentrm
ditrm
ignorer les erreurs, comme il n'y a pas*.o
fichiers, et de revenir le succès toujours.J'ai enlevé l'option-r de la Fpo exemple, parce que cela signifie récursive et ici nous sommes juste
rm
ing.o
fichiers, rien de répéter.Il n'y a pas besoin de la
2>&1 >/dev/null
car avec le-f
il n'y aura pas d'erreurs d'impression.fonctionne à la place de la
@
, mais ce n'est pas la même place dans le Makefile que la commande qu'elle affecte, si quelqu'un maintien du projet, plus tard, pourrait être confondue. C'est pourquoi @ est préféré. Il est préférable de la localité de référence.Si vous mettre un @ devant la commande, il n'a pas d'écho sur la coque. Essayez de changer de rm à @rm. (Référence)
À partir de la notice:
.SILENCIEUX
est essentiellement obsolètes depuis@
est plus souple.Bien pire, c'est que faire imprime beaucoup trop d'informations. Avertissement/erreur/messages privés sont enterrés dans la sortie. D'autre part
-s
(.SILENT
) supprime juste n'importe quoi. Surtout le "rien à faire" et "à jour" des messages peut être une douleur. Il n'y a pas d'option pour les supprimer. Vous avez pour filtrer les activement ou utiliser quelque chose comme colormake. Voici une solution pour grep:Mais à la sortie des numéros de ligne. Le Perl solution est donc de mieux, parce qu'il supprime les numéros de ligne et les bouffées de chaleur stdout immédiatement:
Faire un outil inapproprié. "Quel est le problème Avec GNU make?" explique mieux que je peux.