Ik probeer een compilatieprobleem op te lossen, maar ik kan GCC (of misschien is het make??) niet zover krijgen om me de eigenlijke compiler- en linkercommando’s te laten zien die het uitvoert.
Dit is de uitvoer die ik zie:
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
Wat ik wil zien zou er ongeveer zo uit moeten zien:
$ 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
Merk op hoe in dit voorbeeld de volledige opdracht gcc
wordt weergegeven. Het bovenstaande voorbeeld toont alleen dingen als “CCLD libvirt_parthelper”. Ik weet niet zeker hoe ik dit gedrag moet beheersen.
Antwoord 1, autoriteit 100%
Een droogloopoproepen:
make -n
Dit laat zien wat make
probeert te doen.
Antwoord 2, autoriteit 59%
Bibliotheek-makefiles, die worden gegenereerd door autotools (de ./configure
die u moet uitgeven) hebben vaak een uitgebreide optie, dus in feite gebruiken ze make VERBOSE=1
of make V=1
zou je de volledige commando’s moeten geven.
Maar dit hangt af van hoe de makefile is gegenereerd.
De optie -d
kan helpen, maar het geeft je een extreem lange uitvoer.
Antwoord 3, autoriteit 54%
Systeemonafhankelijke methode bouwen
make SHELL='sh -x'
is een andere optie. Voorbeeld Makefile
:
a:
@echo a
Uitvoer:
+ echo a
a
Dit stelt de speciale SHELL
variabele in voor make
, en -x
vertelt sh
om de uitgevouwen regel af te drukken voordat u het uitvoert.
Een voordeel ten opzichte van -n
is dat de commando’s daadwerkelijk worden uitgevoerd. Ik heb ontdekt dat voor sommige projecten (bijv. Linux-kernel) -n
veel eerder dan normaal kan stoppen met draaien, waarschijnlijk vanwege afhankelijkheidsproblemen.
Een nadeel van deze methode is dat je ervoor moet zorgen dat de shell die zal worden gebruikt sh
is, wat de standaard is die door Make wordt gebruikt omdat ze POSIX zijn, maar kan worden gewijzigd met de SHELL
variabel maken.
Het zou ook cool zijn om sh -v
te doen, maar Dash 0.5.7 (Ubuntu 14.04 sh
) negeert voor -c
commando’s ( wat lijkt te zijn hoe make
het gebruikt), dus het doet niets.
make -p
zal u ook interesseren, dat de waarden van ingestelde variabelen afdrukt.
CMake gegenereerde Makefiles ondersteunen altijd VERBOSE=1
Als in:
mkdir build
cd build
cmake ..
make VERBOSE=1
Speciale vraag op: Met CMake met GNU Make: Hoe kan ik de exacte commando’s zien?
Antwoord 4, autoriteit 9%
Sinds GNU Make versie 4.0 is het argument --trace
een leuke manier om te vertellen wat en waarom een makefile doet, met als output regels als:
makefile:8: target 'foo.o' does not exist
of
makefile:12: update target 'foo' due to: bar
Antwoord 5, autoriteit 6%
Gebruik make V=1
Andere suggesties hier:
make VERBOSE=1
– werkte in ieder geval niet bij mijn proefversies.-
make -n
– geeft alleen de logische bewerking weer, niet de opdrachtregel die wordt uitgevoerd. bijv.CC source.cpp
-
make --debug=j
– werkt ook, maar kan ook multithreaded bouwen mogelijk maken, wat extra output veroorzaakt.
Antwoord 6, autoriteit 4%
Ik gebruik graag:
make --debug=j
https://linux.die.net/man/1/make
–debug[=FLAGS]
Debugging-informatie afdrukken naast de normale verwerking. Als de vlaggen worden weggelaten, dan is het gedrag hetzelfde als het -d
is opgegeven. Vlaggen kunnen een A Voor alle foutopsporingsuitvoer zijn (hetzelfde als het gebruik van -d
), b
voor basisbrugging, v
voor meer uitgebreide basisdebugging, i
Voor het tonen van impliciete regels, j
voor meer informatie over aanroepen van opdrachten , en m
voor debugging tijdens het verwijderen van MAKEFILES.
Antwoord 7, Autoriteit 3%
Afhankelijk van uw automake-versie, kunt u dit ook gebruiken:
make AM_DEFAULT_VERBOSITY=1
Referentie: AM_DEFAULT_VERBELIES
Opmerking: ik heb dit antwoord toegevoegd sinds V=1
werkte niet voor mij.