Supprimer et d'ignorer la sortie pour le Makefile?
Je sais que le @
supprime le préfixe de sortie à partir d'une commande shell dans les Makefiles, et aussi que le -
prefix ignorer les erreurs à partir d'une commande shell. Est-il un moyen de combiner les deux, c'est à dire un préfixe qui supprime la sortie et ignore les erreurs? Je ne pense pas que @-
ou -@
œuvres.
- Les deux
@-
et-@
fonctionne très bien. La même chose s'applique à un+
modificateur ainsi.
Vous devez vous connecter pour publier un commentaire.
En fait,
@-
et-@
à la fois faire le travail, mais l'impression d'unmake: [target] Error 1 (ignored)
avertissement.Au lieu de cela, vous pouvez utiliser
ou, depuis
:
est un raccourci pourtrue
en coque,Présente souvent une meilleure chose à faire, car il éviter de Faire la confusion avertissement qu'une erreur a été ignorée dans un invisible commande.
Considérer les deux la plupart des cas où vous voudrez peut-être ignorer la valeur de retour d'une commande:
Pour le second cas, prenons l'exemple de grepping pour les avertissements dans le fichier journal produit par une commande.
grep
retournera une erreur si il ne trouve pas de correspondance, ce qui n'est pas ce que vous voulez:produit:
À l'aide de
@-
produit un non-sens ignoré l'avertissement d'erreur quand il n'y a de succès, tout|| true
gère à la fois les avertissements et l'absence de mises en garde, sans aucune plainte.Théoriquement à l'aide de
|| true
est plus lent que d'utiliser@-
, mais ce traitement est peu probable d'être un goulot d'étranglement dans bien conçu et entretenu de construire des systèmes. La grande majorité du temps doit être consacré à la construction, ou la vérification des horodateurs, quand il n'y a rien à construire, pas dans l'exécution de milliers de commandes rapides dont les valeurs de retour tous ignoré qu'il serait nécessaire pour cela de disposer d'un mesurables impact sur les performances.GNU make ne vous permettent de combiner les deux
@
et-
:L'exécution de ce avec gmake 3.81 produit de cette sortie:
Comme vous pouvez le voir, la commande n'est pas fait l'écho, et l'erreur est ignorée comme prévu.