Autor Thema: Makefile-Problem  (Gelesen 14164 mal)

TheThing

  • Beiträge: 105
    • Profil anzeigen
Gespeichert
« am: 03. May 2011, 22:35 »
Hi,
nach (sehr) langer Zeit habe ich mich mal wieder meinem Kernel gewidmet (Source angesehen, Würgereiz unterdrückt und neu angefangen). Dabei möchte ich jetzt auch ein Linkerscript und ein Makefile einsetzen.
Das mit dem Linkerscript klappt, aber das Makefile macht mir noch Problem.
Ich erkläre vielleicht zuerst einmal, wie ich das überhaupt haben will:
Im Ordner meines Kernels liegen zuerst einmal das Linkerscript (kernel.ld) und das Makefile. Dann gibt es da noch einen Unterordner (src) in dem der ganze Code liegt.
Wenn ich nun make starte, soll er alle *.bas-Files aus dem src-Ordner kompilieren und das Obj-File im Hauptordner ablegen (evtl. später auch in einem Unterordner obj oder so) und dann alle Obj-Files mit dem Linkerscript linken.
Auf Basis von Teil 4 der Tutorial-Reihe und jeder Menge googlen hab ich mir jetzt ein Makefile zusammengebastelt, dass mich aber mit einem Fehler abspeist:
Zitat
make: *** Keine Regel vorhanden, um das Target »video.o«,
  benötigt von »frost.krn«, zu erstellen.  Schluss.

video.o wäre das Obj-File von video.bas, welches sich um die Ausgabe auf dem Bildschirm kümmert.
Jetzt folgt mein Makefile:
SRCS = $(shell find src -name *.bas)
OBJS = $(addsuffix .o,$(basename $(notdir $(SRCS))))

CC = fbc
LD = ld

CFLAGS = -c
LDFLAGS = -melf_i386 -Tkernel.ld

frost.krn: $(OBJS)
$(LD) $(LDFLAGS) -o $@ $^

%.o: %.bas
$(CC) $(CFLAGS) -o $@ $^

clean:
rm $(OBJS)
rm frost.krn

.PHONY: clean

Wie ihr vermutlich schon erraten habt, habe ich keine Ahnung, wo mein Fehler liegt ;)
Ich hoffe mal, dass ihr mir erklären könnnt, was ich falsch gemacht habe.

Jidder

  • Administrator
  • Beiträge: 1 625
    • Profil anzeigen
Gespeichert
« Antwort #1 am: 03. May 2011, 22:56 »
Zitat
make: *** Keine Regel vorhanden, um das Target »video.o«,
  benötigt von »frost.krn«, zu erstellen.  Schluss.
Die Meldung sagts eigentlich schon: Er sucht nach video.o aber findet es nicht. Stattdessen müsste er nach src/video.o suchen.

Das kannst du zum Beispiel lösen, indem du
1. ihn entweder tatsächlich src/video.o erstellen lässt. Dazu musst du den Aufruf von notdir entfernen.
2. oder die Regel %.o: %.bas in %.o: src/%.bas änderst
3. oder die Variable VPATH auf den Wert src setzt

Diese Möglichkeiten haben jeweils unterschiedliche Konsequenzen, die stören können oder aus einem anderen Blickwinkel betrachtet auch sehr nützliche Eigenschaften mitbringen. Bei der ersten liegen die Objektdateien im Quelltextverzeichnis. Bei der zweiten musst du unter anderem eine neue Regel hinzufügen, wenn du auch Dateien in anderen Verzeichnissen hast. Für die dritte musst du im Manual lesen.

Ich würde übrigens nicht CC als Namen für die Variable mit dem Compiler verwenden. FBC wäre vermutlich besser.
Dieser Text wird unter jedem Beitrag angezeigt.

TheThing

  • Beiträge: 105
    • Profil anzeigen
Gespeichert
« Antwort #2 am: 04. May 2011, 16:38 »
Ich hab mal 2. ausprobiert und es hat geklappt ;) Danke

 

Einloggen