
Ich habe ein großes Durcheinander eines Makefile-Netzwerks geerbt, das selbst von einem anderen Projekt übernommen wurde, mit Makefiles, die überall enthalten waren. Ich versuche, eine einfache Änderung vorzunehmen, ohne das Ganze auszuweiden (so verlockend das auch ist, ich habe im Moment einfach keine Zeit dafür).
Gibt es eine Möglichkeit, ein vollständiges Makefile aus gmake herauszukitzeln,dh, mit allen bereits enthaltenen Dateien? Ich weiß, wie man die Datenbank auslagert, aber das ist bei all dem überflüssigen Müll, der geladen wird, genauso schwer nachzuvollziehen.
Antwort1
Neuauflagehat einige sehr interessante Debug-Ausgaben.
Antwort2
Was Sie suchen, ist ein Äquivalent zu cc -E
for make
. Mir ist kein solches Äquivalent bekannt. Die Verwendung externer Tools hilft in vielen, aber nicht allen Fällen, daSekundärerweiterung.
Aber vielleicht bringt Sie das einen Schritt weiter. Fügen Sie am Ende des anfänglichen Makefiles diese Regel hinzu:
.PHONY: printMakefiles
printMakefiles:
echo $(MAKEFILE_LIST)
Sie können nun herausfinden, welche Makefiles eingebunden wurden, indem Sie
make printMakefiles
Bitte beachten Sie, dass dies nicht 100 % zuverlässig ist, da bedingte Einschlüsse vorliegen können.
Antwort3
Ich bin nicht sicher, ob das rekursiv funktioniert, aber wie wäre es mit etwas wie:
strace -e trace=open make | grep -i makefile
Antwort4
Bearbeiten Sie die Makefile
aufgerufene Hauptdatei. Fügen Sie diese Zeile am Ende (oder zumindest nach der letzten include
in der Datei) hinzu:
$(info MAKEFILE_LIST == $(MAKEFILE_LIST))
Wenn Sie make
dies jetzt ausführen Makefile
, wird vor dem Versenden der Regeln eine Liste der enthaltenen Dateien erstellt.