Wie speichere ich mit *Autotools* die Compilerliste Datei für Datei?

Wie speichere ich mit *Autotools* die Compilerliste Datei für Datei?

Bitte haben Sie Verständnis, dass ich Autotools / Automake / Autoconf verwende undIch kann keine Umleitung verwendenweil es Befehl für Befehl in der von Autotools generierten Make-Datei angewendet werden muss.

Ich brauche eine Möglichkeit, mit der Autotools eine Make-Datei erstellen können, die Vorkehrungen zum Generieren und Speichern der Compiler- und/oder Assemblerlisten enthält, die mit jedem verknüpft sindIndividuellQuelle im Paket.

Mein erster Versuch war, '-Wa,-acdhln -g' in CCFLAGS einzufügen. Dies erzeugte zwar eine zusammengesetzte C/Assembler-Liste, aber esging zum Terminal,nicht in eine Datei. Wenn ich die Make-Ausgabe erfassen würde (mithilfe einer Umleitung), hätte ich 47 verschiedene, aneinandergereihte Listen mit dazwischen eingestreuten Build-Befehlen.

Was ich hoffte, würde passieren, optimistisch beim Lesen des GCC-DokumentsAllgemeine Optionen - Verwenden der GNU Compiler Collection,

-o Datei
Ausgabe in Datei Datei ablegen. Dies gilt für jede Art von Ausgabe, sei es eine ausführbare Datei, eine Objektdatei, eine Assemblerdatei oder vorverarbeiteter C-Code.

Wenn -o nicht angegeben ist, wird standardmäßig eine ausführbare Datei in a.out, die Objektdatei für source.suffix in source.o, die Assemblerdatei in source.s, eine vorkompilierte Headerdatei in source.suffix.gch und der gesamte vorverarbeitete C-Quellcode in der Standardausgabe abgelegt.

dient zum Anzeigen der Dateien {file}.o und {file}.s, basierend auf „-o {file}.o“ in der GCC-Befehlszeile.

Was passiert ist, ist, dass die Assemblyliste offensichtlich an die Standardausgabe gesendet wurde.

BEARBEITEN, um 23. Oktober 2016 hinzuzufügen. Mir ist jetzt klar, dass in der Dokumentation Dinge wie die Compiler-Ausgabedatei, die als Eingabe an den Assembler übergeben wird, und die Assembler-Ausgabedatei, die als Eingabe an den Linker übergeben wird, gemeint waren. Auch die Assembler-LISTING-Datei, die ich erfassen möchte, war nicht gemeint.

Dies gilt auch für die Verwendung der Option -save-temps; dadurch würde nur die Ausgabe des Assemblers gespeichert, also die Eingabedatei des Linker, nicht die Assembler-Listing-Datei.

  • Eine alternative Interpretation des Dokuments könnte bedeuten, dass jede Ausgabedatei in der einzigen Datei abgelegt wird, die im Operanden -o benannt ist, entweder vermischt oder mit der zuletzt erstellten Datei, die zuvor erstellte Dateien überlagert. (Beispielsweise wird die Ausgabe des Compiler-Durchlaufs mit der Ausgabe des Assembler-Durchlaufs überlagert, die wiederum mit der Ausgabe des Collection-Durchlaufs überlagert wird.)

    Da dies kontraproduktiv erscheint, nahm ich an, dass GCC (der oberste Ausführungsmodus) intelligent genug sein könnte, um den Dateinamen für verschiedene Durchläufe anzupassen. Dies scheint jedoch nicht zuzutreffen.

  • Das Weglassen des Dateinamens aus „-o“ scheint genau das zu sein, was gewollt ist, abgesehen davon, dass die Objektdatei immer „a.out“ statt „{source}.o“ heißt. Warum eine Konstante für den Quellausgabenamen gewählt wurde, ergibt für mich keinen Sinn, aber ein Umbenennungsschritt nach jedem GCC-Aufruf könnte „a.out“ in „{source}.o“ ändern.

  • Konsultation desGNU Assembler-Dokumentationsagt noch weniger über -o aus und hat keine Option zum Umgang mit der Ausgabeliste. Eine Assemblerversion, tigcc, dokumentiert, dass die Liste als Standardausgabe ausgegeben wird.

    • Wurde dies bei den GNU- und GNU Build Standard-Revisionen für Unix nicht berücksichtigt?

    • (Bin ich verrückt oder lebe ich einfach in einer Unwirklichkeit namens Unix? ? ?)

Jetzt sieht es so aus, als müsste Make GCC mitteilen, dass bei der Ausführung des Assembly-Schritts die Standardausgabe in[email geschützt]Datei. Ich vermute, dass dies nicht möglich ist, wenn man bedenkt, wie sich die GCC-Optionen zu verhalten scheinen (und ein kurzer Blick darauf, wie Spezifikationsdateien verwendet werden). Vielleicht kann Automake (oder libtools?) einen mehrstufigen Kompiliervorgang erstellen, der die verschiedenen Schritte aufteilt, sodass die Assemblerausgabe erfasst werden kann.

Aber,da die Make-Datei von Autotools generiert wird, brauche ich eine Möglichkeit,weisen Sie Autotools an, die Make-Datei zu erstellenDadurch wird die Assembly-Ausgabedatei erstellt/aufgezeichnet. Diese Aufgabe erfordert anscheinend das Neuschreiben einiger Autoconf/Automake-Regeln und/oder Makros.

Schließlich arbeite ich mit einem Paket, das jemand anderes mit Autotools erstellt, in ein Tar-Paket gepackt und mir heruntergeladen hat. Ich habe weder die Autotools-Paketierung durchgeführt, noch die riesigen *.ac-Dateien erstellt, und ich möchte sie, wenn möglich, auch nicht hacken.

Ich muss mir nur einige Assembly- und Link-Maps besorgen, um zu versuchen, ein Problem mit dem Paket zu debuggen.

Antwort1

Ich habe schließlich nachgegeben und ein echtes Programm geschrieben, das die erfasste Terminalausgabe analysiert und die Listendateien extrahiert. Obwohl es für mein spezifisches System/mein Build-Konfiguration/Paket funktioniert, kann ich es nur als Beispiel anbieten. Es ist sicherlich kein sofort verwendbares Tool.

Es tut mir leid, dass dies keine allgemeine Antwort zur Behebung eines Autotools-Mangels ist.

verwandte Informationen