web-dev-qa-db-fra.com

Supprimer l’écho de l’invocation de commande dans le makefile?

J'ai écrit un programme pour un devoir qui est censé imprimer sa sortie sur stdout. La spécification d'affectation nécessite la création d'un Makefile qui, lorsqu'il est appelé en tant que make run > outputFile devrait exécuter le programme et écrire le résultat dans un fichier dont l’empreinte SHA1 est identique à celle indiquée dans la spécification.

Mon problème est que mon makefile:

...
run:
     Java myprogram

imprime également la commande qui exécute mon programme (par exemple Java mon programme) dans le fichier de sortie, afin que mon fichier contienne cette ligne supplémentaire entraînant une empreinte erronée.

Existe-t-il un moyen d'exécuter une commande sans l'invocation de commande en écho sur la ligne de commande?

108
noobler

Ajouter @ au début de la commande pour indiquer à gmake de ne pas imprimer la commande en cours d'exécution. Comme ça:

run:
     @Java myprogram

Comme l’a suggéré Oli, c’est une caractéristique de Make et non de Bash.

D'autre part, Bash n'échouera jamais les commandes en cours d'exécution à moins que vous ne lui demandiez de le faire explicitement (c'est-à-dire avec -x option).

185
user405725

Encore plus simple, utilisez make -s (mode silencieux)!

54
user3619296

Vous pouvez aussi utiliser .SILENT

.SILENT: run
    hi:
         echo "Hola!"
    run:
         Java myprogram

Dans ce cas, make hi affichera la commande, mais make run ne sera pas sorti.

16
Kien Pham

L'effet de précéder la commande avec un @ Peut être étendu à une section en étendant la commande en utilisant une barre oblique inverse à la fin de la ligne. Si une commande .PHONY Est désirée pour supprimer la sortie, vous pouvez commencer la section avec:

@printf "..."
2
Wiley