Dans les fichiers makefiles, une ligne précédée d'un à disables the print of the output. J'ai un makefile où chaque ligne est précédée d'un at, mais pour le débogage, j'ai besoin de voir ce qui se passe. Y at-il un moyen de dire faire ignorer le at et sortir la ligne? le débogage est excessif, et l'option -n les imprime, mais ne fait rien (c'est pour l'exécution à sec)ignorer le symbole (@) dans les fichiers makefiles
Répondre
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.
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
).
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'. –
Bon tour et une réponse à juste titre acceptée, mais mes remarques sont valables. –
True. Si vous faites une modification triviale, je vais supprimer mon downvote. –
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é!
+1 pour une volonté de plonger dans la source. Le logiciel libre est génial comme ça. –
Prenez tout le @ et ajoutez cette ligne au Makefile:
.SILENT:
Lorsque vous voulez déboguer, commentez la ligne .SILENT.
aussi une bonne idée. +1 –
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).
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.
- 1. Comment comprendre les fichiers makefiles et python
- 2. mercurial ignorer les fichiers
- 3. [Le symbole ne sera plus tapé dans les fichiers ASPX.CS
- 4. comment ignorer les fichiers dans TFS
- 5. comment ignorer automatiquement les fichiers dans grep
- 6. Ignorer les fichiers supprimés dans git?
- 7. Est-ce que les fichiers makefiles Turing sont complets?
- 8. Ignorer le concepteur et les fichiers générés dans l'analyse Resharper
- 9. Ignorer les fichiers de projet Eclipse dans le projet SVN
- 10. Mercurial - Ignorer les fichiers volumineux
- 11. Erlang - Makefiles
- 12. Portant MSVS proj fichiers à makefiles?
- 13. Ignorer les fichiers volumineux dans la recherche de fichiers IntelliJ
- 14. Ignorer les fichiers déjà dans un référentiel SANS les supprimer
- 15. Pourquoi Subversion ignore les fichiers qui contiennent le symbole @?
- 16. Ie ignorer les fichiers javascript ou le code en général
- 17. Ignorer récursivement les fichiers dans l'arborescence source entière dans subversion
- 18. MakeFiles et dépendances
- 19. manipulation de symbole de chaîne dans les fichiers batch?
- 20. CVS checkout ignorer les fichiers corrompus
- 21. jolis makefiles d'impression
- 22. Sections conditionnelles dans AIX Makefiles
- 23. Ignorer les fichiers dans Subversion sur une base par projet
- 24. Ignorer les fichiers modifiés (mais non validés) dans git?
- 25. Paramètre vimrc pour ignorer les types de fichiers dans netrw
- 26. Ignorer les fichiers générés automatiquement par Emacs dans un diff
- 27. Commandes enfilées implicitement dans Makefiles?
- 28. Comment ignorer les fichiers de configuration dans SVN?
- 29. Signification de -DHAVE_CONFIG_H dans makefiles
- 30. Syntaxe .hgignore pour ignorer uniquement les fichiers, pas les répertoires?
Vous pouvez aussi utiliser ': =' au lieu de '=' pour la ligne 'AT ='. Je ne m'en souviens pas. –
+1 pour l'astuce –