2010-10-05 7 views

Répondre

16

Faire une variable qui a une valeur par défaut de @:

AT := @ 

Et puis utilisez que dans votre Makefile:

foo: 
    $(AT)fooc -o [email protected] 

Lancez ensuite make comme make AT=. Vous pouvez obtenir colombophile que cela, si vous aimez:

V := 0 
AT_0 := @ 
AT_1 := 
AT = $(AT_$(V)) 

Cela rendra les commandes silencieux, à moins V est réglé sur 1 (par exemple, make V=1). Cela utilise la caractéristique non-POSIX, mais commune de l'expansion de la variable récursive.

+0

Vous pouvez aussi utiliser ': =' au lieu de '=' pour la ligne 'AT ='. Je ne m'en souviens pas. –

+0

+1 pour l'astuce –

2

Dans GNU Make, cela n'est pas possible hors de la boîte. Avoir un Makefile qui est complètement non-configurable est simplement une mauvaise pratique. Suppression des signes @ et exécution avec -s est le moyen le plus simple d'obtenir une génération silencieuse (à l'exception des commandes possibles echo).

+0

Il est possible (et facile) de créer un Makefile avec une verbosité configurable. Le noyau linux le fait, tout comme 'makefile' généré par' automake' avec 'AM_SILENT_RULES'. –

+0

Bon tour et une réponse à juste titre acceptée, mais mes remarques sont valables. –

+0

True. Si vous faites une modification triviale, je vais supprimer mon downvote. –

7

Vous pouvez avoir faire dire à quelqu'un d'autre pour imprimer les commandes quand elles sont exécutées, ce qui est la même chose:

make SHELL='/bin/sh -x' ...your make arguments... 

Cependant cela ne fonctionnera pas si bien si votre makefile contient des fragments de script shell en tant que recettes, plutôt que des séquences de commandes simples distinctes, comme vous le verrez les commandes shell individuelles au fur et à mesure qu'elles sont invoquées au lieu des fragments entiers. Alternativement, vous pouvez réellement profiter de la nature libre de GNU Make et pirater votre propre version qui ignore les signes @. Grepper la GNU Make code source COMMANDS_SILENT va bientôt vous montrer qu'il suffit d'ajouter 1 || à la condition ?: dans les arguments de l'appel à start_job_command() dans message()job.c. Travail terminé!

+0

+1 pour une volonté de plonger dans la source. Le logiciel libre est génial comme ça. –

2

Prenez tout le @ et ajoutez cette ligne au Makefile:

.SILENT:

Lorsque vous voulez déboguer, commentez la ligne .SILENT.

+0

aussi une bonne idée. +1 –

0

Désactiver le @ devant un script make est utile, mais parfois il est trop bruyant quand le script make est très long. Une autre technique de débogage consiste à activer une fonctionnalité shell qui renvoie des commandes juste avant leur exécution. Cela évite de devoir manipuler @ ou .SILENT. Prenons un Makefile exemple:

Il est probable que non-portable car elle dépend des caractéristiques présentes dans le shell qui exécute le script, mais la portabilité n'est pas vraiment important pour le débogage (si cela fonctionne pour vous).

0

Pour rendre les choses encore plus configurables, autorisez un commutateur make à activer la verbosité. Il est par défaut normal en mode silencieux. Uniquement avec le mode -e verbose = 1, il sera bavard bien sûr:

## 
# Verbose ENABLE/DISABLE 
# invoke make -e VERBOSE=1 
## 
[email protected] 
ifeq ($(VERBOSE),1) 
    V= 
endif 

all: 
    $(V)echo test 
    echo test 

Merci pour ce sujet, il a été d'une grande aide pour mon travail.

Questions connexes