Autor Thema: ISO erstellen will nicht so Recht  (Gelesen 3943 mal)

OSLiga

  • Beiträge: 12
    • Profil anzeigen
Gespeichert
« 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
« Letzte Änderung: 26. February 2014, 13:55 von OSLiga »
OS in Arbeit

Svenska

  • Beiträge: 1 778
    • Profil anzeigen
Gespeichert
« Antwort #1 am: 26. February 2014, 15:02 »
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. :-)

OSLiga

  • Beiträge: 12
    • Profil anzeigen
Gespeichert
« Antwort #2 am: 01. March 2014, 08:44 »
Entschuldigung das ich mich nicht gemeldet hab, aber mein Internet ist ausgefallen.
Aber das Target für iso gibt es doch: iso: $(COS).iso
OS in Arbeit

MNemo

  • Beiträge: 547
    • Profil anzeigen
Gespeichert
« Antwort #3 am: 01. March 2014, 14:18 »
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.
„Wichtig ist nicht, besser zu sein als alle anderen. Wichtig ist, besser zu sein als du gestern warst!“

Svenska

  • Beiträge: 1 778
    • Profil anzeigen
Gespeichert
« Antwort #4 am: 01. March 2014, 18:53 »
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.

OSLiga

  • Beiträge: 12
    • Profil anzeigen
Gespeichert
« Antwort #5 am: 01. March 2014, 22:41 »
Okay, Danke!
OS in Arbeit

 

Einloggen