Kompilieren von C-Datei mit Assembler-Datei-Abhängigkeiten
Ich habe eine Datei-app.c, die Aufrufe von zwei externen Funktionen, dh. func_asm1 und func_asm2. Beide Funktionen sind in einer eigenen Assembler-file, dh. func_asm1.S und func_asm2.S. Darüber hinaus
Ich habe zwei header-Dateien, dh. func_asm1.h und func_asm2.h, wo die Schnittstelle der beiden assembler-Funktionen sind definiert:
extern void func_asm1(unsigned int *r, const unsigned int *a);
Haupt-file der app.c enthält die beiden header func_asm1.h und func_asm2.h, mein make-Datei
sieht im moment wie folgt, aber ich nicht funktioniert... Jemand eine Idee, was falsch sein könnte?
CC = bin/arm-elf-gcc
AS = bin/arm-elf-as
SFLAGS=-S -O2
func_asm1.o: func_asm1.S
$(AS) -o $@ $<
func_asm2.o: func_asm2.S
$(AS) -o $@ $<
app.o: app.c app.h func_asm1.h func_asm2.h
$(CC) $(SFLAGS) app.c -o app.o func_asm1.o func_asm2.o
Vielen Dank für Eure Hilfe!
- Welche Fehler sind Sie immer?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich denke, dein makefile hat falschen Abhängigkeiten:
Der Letzte Teil sollte so etwas wie:
Warum ? Da func_asm1.o und func2.o hängt Ihre source-code (ich gehe davon aus, dass Sie nicht func_asm.h im assembler source-code)
Auf der anderen Seite, app.o hängt von seiner source-code (app.c), die header-Dateien (app.h, func_asm1.h und func_asm2.h) und die Objekt-code für die assembly-Dateien. Beachten Sie, dass Sie kompilieren UND zu verknüpfen, dass ein Teil des makefile, so dass, wenn Sie den Objekt-code für die assembly-Dateien ändern, müssen Sie verknüpfen die Anwendung und führen Sie daher diese Zeilen.
Als ich habe schon darauf hingewiesen, in den Kommentaren, sollten Sie überprüfen die Parameter übergeben, um gcc (das -S-flag übergeben SFLAGS )
Den
-S
option weist den gcc zu erzeugen assembler-output eher als ein Objekt, das ist nicht, was Sie wollen.Wenn Sie gcc verwenden, geben Sie einfach die assembler-Dateien in gcc:
Für die Nachverfolgung von Abhängigkeiten, ich würde verlängern die beiden kompilieren Regeln mit
-MD -MP
und füge die generierte *.d Dateien in meinem Makefile, sondern als Liste-Kopfzeilen ausdrücklich.