Wie kann ich gmake dazu bringen, mir eine Liste aller enthaltenen Makefiles zu geben?


7

Ich habe ein großes Durcheinander eines Makefile-Netzwerks geerbt, das selbst von einem anderen Projekt geerbt wurde, wobei Makefiles überall enthalten waren. Ich versuche, eine einfache Änderung vorzunehmen, ohne das Ganze zu entkernen (verlockend, obwohl ich gerade keine Zeit habe).

Gibt es eine Möglichkeit, ein vollständiges Makefile aus gmake herauszuholen, dh mit allen enthaltenen Dateien, die bereits enthalten sind? Ich weiß, wie man die Datenbank entleert, aber das ist mit all dem überflüssigen Müll, der geladen wird, genauso schwer zu verfolgen.


Ich frage mich, ob dies im Allgemeinen sinnvoll ist, da Makefiles dynamisch (aus dem Inhalt) generiert und dann eingeschlossen werden können.
vinc17

Guter Punkt, aber sie müssen nicht dynamisch generiert werden (wie das oben erwähnte "große Durcheinander eines Makefile-Netzwerks"), und es kann immer noch nützlich sein, herauszufinden, wo sich ein explizites Ziel möglicherweise versteckt.
Joe Sewell

Antworten:



1

Ich bin mir nicht sicher, ob das rekursiv funktioniert, aber was ist mit so etwas wie:

strace -e trace=open make | grep -i makefile

Sie sollten -fStrace für folgende Kinder auf Gabel hinzufügen ...
Maxschlepzig

0

Es scheint, dass makedies keine einfache Möglichkeit bietet, aber vielleicht reicht es aus, wenn Sie alle includeAnweisungen aus allen Makefiles wie folgt abrufen:

find . -iname 'Makefile' -print0 | xargs -0 grep '^include'

Netter Versuch, aber es gibt mir nicht das vollständige Bild, da es mir nicht zeigt, was das erste Ziel in der Messe ist. Verschachtelte Includes werden ebenfalls nicht berücksichtigt, insbesondere wenn sie keine Include-Datei 'Makefile' oder ein Standardäquivalent genannt haben und sie über den gesamten Verzeichnisbaum geworfen haben.
Joe Sewell

Dann kenne ich keinen einfachen Weg, das zu tun. Es scheint, dass Sie ein Programmierer sind. Daher besteht eine geeignete Möglichkeit für Sie darin, den Quellcode von zu ändern makeund eine Nachricht hinzuzufügen, die gedruckt wird, wenn eine includeDirektive verarbeitet wird.
Dmitry

0

Was Sie suchen ist ein Äquivalent cc -Efür make. Mir ist ein solches Äquivalent nicht bekannt. Die Verwendung externer Tools hilft in vielen, aber nicht allen Fällen aufgrund der sekundären Erweiterung .

Aber vielleicht bringt Sie das einen Schritt näher. Fügen Sie am Ende des ersten Makefiles diese Regel hinzu:

.PHONY: printMakefiles
printMakefiles:
        echo $(MAKEFILE_LIST)

Sie können jetzt herausfinden, welche Makefiles enthalten waren, indem Sie ausführen

make printMakefiles

Bitte beachten Sie, dass dies nicht 100% zuverlässig ist, da es bedingte Einschlüsse geben kann.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.