Lowlevel
OffZone => Offtopic => Thema gestartet von: OSLiga am 26. February 2014, 13:52
-
Hallo,
ich nutze NetBeans 7.4 (C/C++ Version) und habe auch eine Makefile mit der eine ISO erstellt werden soll, nachdem die Dateien compiliert worden. Doch ich finde keine *.iso Datei. NetBeans sagt das alles erfolgreich erstellt wurde. Kann mir wer helfen?
LG
OSLiga
PS: Ich nutze einen Mac mit OS X 10.9
EDIT: Hier noch mal die Makefile... hab sie vergessen :roll:
all: cos
loader.o: loader.cpp
g++ -c loader.cpp
kernel.o: kernel.cpp
g++ -c kernel.cpp
api.o: api.cpp
g++ -c api.cpp
boot.asm: boot.asm
as -o boot.bin boot.asm
$(kernel).elf: $(OBJS)
iso: $(COS).iso
clean:
rm -rf *.o
rm -rf *.bin
-
Dein Makefile ist unvollständig.
Das Target "cos" fehlt. "$(kernel)" und "$(OBJS)" sind nicht bestimmt. Es fehlen die Befehle für die Targets "$(kernel).bin" und "iso".
Und "rm -rf" im "make clean"-Zweig ist fahrlässig. Ich habe so schon mehrfach meinen Sourcetree verloren, während ich an Makefiles bastelte. "rm -f" reicht aus. :-)
-
Entschuldigung das ich mich nicht gemeldet hab, aber mein Internet ist ausgefallen.
Aber das Target für iso gibt es doch: iso: $(COS).iso
-
Ja, das Ziel 'iso' hast du erwähnt, aber nicht wie make das erreichen soll/kann.
Make weiß es braucht dafür $(COS).iso, aber auch wie es das erreicht, hast du nirgends beschrieben.
Genauso wenig wie du gesagt hast, wie es aus $(OJBS) den kernel zusammen bauen soll (linken).
$(kernel).elf: $(OBJS)
<TAB>befehl(e) zum linken des kernels
<TAB>z.B.: ld -T link.txt -o $(kernel).elf $(OBJS)
$(COS).iso: <liste mit abhänigkeiten, also $(kernel).elf>
<TAB>befehle zum bauen des iso's
<TAB>z.B.:
<TAB>erstellen von ISO_DATA_DIR (alles was aufs iso drauf soll)
<TAB>mkisofs -input-charset UTF8 --quiet -R -b boot/grub/stage2_eltorito -no-emul-boot -boot-load-size 4 -boot-info-table -o $(COS).iso /tmp/ISO_DATA_DIR/
BTW:
bei boot.asm hast du einen Tippfehler, es sollte "boot.bin: boot.asm" heißen.
-
Aber das Target für iso gibt es doch: iso: $(COS).iso
Diese Zeile sagt make, dass es, wenn du "make iso" machst, eine $(COS).iso braucht. Aber es nicht beschrieben, wo make die Datei herbekommt: Es gibt keine Zeile, wo $(COS).iso links vom Doppelpunkt steht.
Grundsätzlich ist make auch nicht allwissend, du musst ihm schon sagen, was es tun soll.
Die meisten Regeln dafür sehen so aus:
zu_erzeugende_datei: alle_dafuer_benotigten_dateien
befehl_um_datei_aus_benoetigten_dateien_zu_erzeugen
noch_ein_befehl_dazu
und_weils_so_schoen_war_gleich_noch_einer
(Beachte: Links von den Befehlen müssen Tabs stehen, keine Leerzeichen!)
Dein "make iso" ist eine Besonderheit, weil es keine Befehle braucht.
-
Okay, Danke!