Generieren Sie automatisch Abhängigkeiten für Objektdateien (Linker) für ausführbare C / C ++ - Dateien

Momentan arbeite ich an einem flexiblen C / C ++ Build Framework, das ich (hoffentlich) bald als Open Source verwenden werde. (sehendiese Frage für einige Hintergrundinformationen).

Ich benutze den folgenden Befehl, um die Abhängigkeiten von # include-Dateien für Quell- / Header-Dateien zu generieren.

gcc -M -MM -MF

Gibt es eine Möglichkeit, auf clevere Weise auf Linker-Abhängigkeiten (.o-Datei) für zu schließen?ausführbare Dateien (Unit-Tests + ausführbare Hauptdatei für die Zielplattform in meinem Fall) Verwenden von gcc / GNU-Dienstprogrammen auf ähnliche Weise wie oben? Gegenwärtig macht das Framework eine ganze Reihe von Annahmen und ist ziemlich dumm, diese Abhängigkeiten zu bestimmen.

Ich habe von einem Ansatz gehört, bei dem dienm Mit dem Befehl kann eine Liste undefinierter Symbole in einer Objektdatei erstellt werden. Wenn Sie beispielsweise nm für eine Objektdatei ausführen (die mit gcc -c kompiliert wurde), erhalten Sie Folgendes:

nm -o module.o

module.o:         U _undefinedSymbol1
module.o:         U _undefinedSymbol2
module.o:0000386f T _definedSymbol

Man würde dann nach anderen Objektdateien suchen, in denen diese undefinierten Symbole vorkommensind definiert, um eine Liste der Abhängigkeiten von Objektdateien zu erstellen, die zum erfolgreichen Verknüpfen der Datei erforderlich sind.

Wird dies als bewährte Methode zum Ermitteln von Linker-Abhängigkeiten für ausführbare Dateien angesehen? Gibt es andere Möglichkeiten, auf diese Abhängigkeiten zu schließen? Angenommen, alle Objektdateien sind bereits vorhanden (d. H. Sie wurden bereits mit gcc -c kompiliert), wenn Sie Ihre Lösung vorschlagen.

Antworten auf die Frage(3)

Ihre Antwort auf die Frage