271 votes

Supprimer l'écho de l'invocation de la commande dans le makefile ?

J'ai écrit un programme pour un devoir qui est censé imprimer sa sortie sur stdout. La spécification du devoir requiert la création d'un Makefile qui, lorsqu'il est invoqué en tant que make run > outputFile doit exécuter le programme et écrire la sortie dans un fichier, qui a une empreinte SHA1 identique à celle donné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 monprogramme) dans le fichier de sortie, de sorte que mon fichier inclut cette ligne supplémentaire, ce qui entraîne une empreinte digitale erronée.

Existe-t-il un moyen d'exécuter une commande sans que l'invocation de la commande ne soit répercutée sur la ligne de commande ?

437voto

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

run:
     @java myprogram

Comme Oli l'a suggéré, il s'agit d'une caractéristique de Make et non de Bash.

D'un autre côté, Bash ne fera jamais l'écho des commandes en cours d'exécution, à moins que vous ne lui demandiez explicitement de le faire (c'est-à-dire avec l'option -x option).

146voto

user3619296 Points 1219

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

90voto

Matt Ridge Points 271

Vous pouvez également utiliser .SILENT

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

Dans ce cas, make hi produira la commande, mais make run ne sera pas publié.

7voto

Wiley Points 31

L'effet de faire précéder la commande d'un @ peut être étendue à une section en étendant la commande à l'aide d'une barre oblique inversée de fin de ligne. Si un .PHONY est souhaitée pour supprimer la sortie, on peut commencer la section avec :

@printf "..."

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X