Ich habe ein Makefile mit diesen Regeln.Makefile Überspringe eine Regel, obwohl der Dateityp existiert
all: $(TARGET)
OBJECTS = file.o
%.o: %.c
$(COMPILER) -c $(FLAGS) &< -o C_$(basename [email protected]).o
%.o: %.s
$(COMPILER) -c $(FLAGS) &< -o S_$(basename [email protected]).o
... The Linker is then called with *.o to link all the object files
Ich habe den gleichen Dateinamen file.c und file.s in einem src-Verzeichnis. Aber make führt nur die erste Regel für die Objektdatei aus. Warum kompiliert es nur einmal? Und wie kann ich make machen, um sowohl file.c als auch file.s zu kompilieren, wenn sie in meinem src-Ordner existieren?
Ich möchte nicht einen anderen Objekt Dateinamen für eine andere Erweiterung erstellen müssen. Das wäre albern.
Gibt es eine Möglichkeit für mich, den Dateinamen mit der Erweiterung .s und .c zu kompilieren?
Ich fühle mich wie make kann dies leicht tun und ich vermisse etwas.
Vielen Dank für die Hilfe. Wenn ich nicht klar bin, bitte sag es mir und ich werde versuchen, es ausführlicher zu erklären.
Ist das Regel # 4? Ich denke, ich kann für jede Datei einen eigenen Dateinamen haben. Es macht mein Makefile unglaublich groß und schwer zu pflegen. Gibt es trotzdem Makefile zu zwingen, ein Ziel mit allen verfügbaren Regeln zu erstellen? –
@Bradleybare: Ich weiß nicht was * "ein separater Dateiname.o für jede Datei" * bedeutet. Von welchem Ziel sprichst du? Warum möchtest du, dass Make 'foo.o' mit einer Regel erstellt und dann mit einer anderen überschreibt? – Beta
Ich nicht. Ich habe nur eine Datei namens DMA2D.c und DMA2D.s, weil ich die Registerregeln in asm schreiben kann, aber das Zeug auf höherer Ebene in c. Ich wollte in der Lage sein, sie beide DMA2D aber mit einer anderen Erweiterung zu nennen. Mit seperatem Dateiname.o meine ich DMA2D_S.o und DMA2D_C.o. –