Lowlevel

OffZone => Offtopic => Thema gestartet von: OSLiga am 26. February 2014, 13:52

Titel: ISO erstellen will nicht so Recht
Beitrag 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
Titel: Re: ISO erstellen will nicht so Recht
Beitrag von: Svenska 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. :-)
Titel: Re: ISO erstellen will nicht so Recht
Beitrag von: OSLiga 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
Titel: Re: ISO erstellen will nicht so Recht
Beitrag von: MNemo 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.
Titel: Re: ISO erstellen will nicht so Recht
Beitrag von: Svenska 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.
Titel: Re: ISO erstellen will nicht so Recht
Beitrag von: OSLiga am 01. March 2014, 22:41
Okay, Danke!