Comment puis-je me force à faire/GCC pour me montrer les commandes?
Je suis en train de déboguer un problème de compilation, mais je ne peux pas sembler obtenir GCC (ou peut-être c'est de faire??) pour me montrer la véritable compilateur et l'éditeur de liens commandes en cours d'exécution.
Ici est le résultat que je vois:
CCLD libvirt_parthelper
libvirt_parthelper-parthelper.o: In function `main':
/root/qemu-build/libvirt-0.9.0/src/storage/parthelper.c:102: undefined reference to `ped_device_get'
/root/qemu-build/libvirt-0.9.0/src/storage/parthelper.c:116: undefined reference to `ped_disk_new'
/root/qemu-build/libvirt-0.9.0/src/storage/parthelper.c:122: undefined reference to `ped_disk_next_partition'
/root/qemu-build/libvirt-0.9.0/src/storage/parthelper.c:172: undefined reference to `ped_disk_next_partition'
/root/qemu-build/libvirt-0.9.0/src/storage/parthelper.c:172: undefined reference to `ped_disk_next_partition'
collect2: ld returned 1 exit status
make[3]: *** [libvirt_parthelper] Error 1
Ce que je veux voir devrait être similaire à ceci:
$ make
gcc -Wall -c -o main.o main.c
gcc -Wall -c -o hello_fn.o hello_fn.c
gcc main.o hello_fn.o -o main
Avis comment cet exemple a le complet gcc
commande affiche. L'exemple ci-dessus affiche simplement des choses comme "CCLD libvirt_parthelper". Je ne suis pas sûr de la façon de contrôler ce comportement.
- Vous exécutez un fichier makefile, ou tout simplement un
gcc
commande? - Cela ressemble à Kbuild ou Autotools la sortie. Essayez de
make V=1
. - Liés: à l'inverse de la question Contrôler la sortie d'une commande à moins verbeux, ne pas faire echo à chaque commande
Vous devez vous connecter pour publier un commentaire.
D'invoquer un de fonctionnement à sec:
Va vous montrer quels
make
tente de faire.make -n
ne pas exécuter les commandes. Donc la bonne réponse estmake V=1
make V=1
ne fonctionne que si le fichier Makefile prend en charge. automake est makefiles le faire, mais beaucoup d'autres ne le font pas.make VERBOSE=1
; pour GNU autotoolsmake V=1
.make SHELL='sh -x'
: stackoverflow.com/a/32010960/895245make -k
m'a aidé (-k
=--keep running
)Bibliothèque makefiles, qui sont générés par les autotools (le
./configure
vous avez à la question) ont souvent une option verbose, donc, fondamentalement, à l'aide demake VERBOSE=1
oumake V=1
devrait vous donner le plein de commandes.Mais cela dépend de la façon dont le makefile a été généré.
La
-d
option pourrait aider, mais il vous donnera une très longue sortie.VERBOSE=1
, pasV=1
.Système de construction indépendante de la méthode de
est une autre option. Exemple de
Makefile
:De sortie:
Cela définit le spécial
SHELL
variable pourmake
, et-x
ditsh
pour imprimer l'élargissement de la ligne avant de l'exécuter.Un avantage sur
-n
est réellement exécute les commandes. J'ai constaté que pour certains projets (par exemple le noyau Linux) qui-n
peut s'arrêter de fonctionner beaucoup plus tôt que d'habitude, probablement en raison de problèmes de dépendance.Un inconvénient de cette méthode est que vous devez vous assurer que le shell qui sera utilisé est
sh
, qui est celui par défaut utilisées par la marque comme ils sont POSIX, mais elle peut être changée avec laSHELL
rendre variable.Faire
sh -v
serait cool, mais Dash 0.5.7 (Ubuntu 14.04sh
) ignore pour-c
commandes (ce qui semble être de savoir commentmake
l'utilise) afin de ne pas faire n'importe quoi.make -p
s'adresse également à vous, qui imprime les valeurs de définir des variables.CMake Makefiles générés
Voir: Utilisation de CMake avec GNU Make: Comment puis-je voir les commandes?
SHELL='$$SHELL -x'
fera$SHELL
littérale qui n'est pas évalué. À l'aide demake SHELL="$SHELL -x"
fonctionne.SHELL='sh -x'
), mais si votre makefiles devaient passerSHELL
autour, ils doivent le faire de la sorte:SHELL='$(SHELL)'
, pasSHELL=$(SHELL)
. Donc, vous pourriez avoir besoin de faire quelques remplacements.Depuis GNU, la version 4.0, le
--trace
argument est une belle façon de dire en quoi et pourquoi un makefile n', outputing des lignes comme:ou
Utilisation
make V=1
D'autres suggestions ici:
make VERBOSE=1
- n'a pas de travail au moins à partir de mes essais.make -n
- affiche uniquement les logiques de fonctionnement, pas de ligne de commande en cours d'exécution. E. g.CC source.cpp
make --debug=j
- fonctionne aussi bien, mais peut également activer le mode multi threaded bâtiment, causant de sortie supplémentaire.make VERBOSE=1
est pour CMake. Vos essais ont été le plus probable avec GNU autotools-en fonction des projets.J'aime utiliser:
Il montre les commandes qu'il exécute:
https://linux.die.net/man/1/make
--debug[=FLAGS]
Imprimer les informations de débogage en outre à des conditions normales de traitement. Si les DRAPEAUX sont omis, alors le comportement est le même que si
-d
a été spécifié. Les DRAPEAUX peuvent être une pour tous la sortie de débogage (de même que l'utilisation-d
),b
de base de débogage,v
pour plus détaillé de base de débogage,i
pour montrer des règles implicites,j
pour plus de détails sur l'invocation de commandes, etm
pour le débogage en refaisant les makefiles.Selon votre automake version, vous pouvez également utiliser cette:
Référence: AM_DEFAULT_VERBOSITY
Note: j'ai ajouté cette réponse depuis
V=1
ne fonctionne pas pour moi.