Rekursives Makefile
-
Nabend zusammen,
ich habe mir eine rekursive Makefile-Struktur geschrieben.
Leider funktioniert sie nicht richtig.
Fehlerausgabe:make gcc -Wall -O3 -fstrength-reduce -fomit-frame-pointer -finline-functions -nostdinc -fno-builtin -march=i386 -I./kernel/include -c -o obj/boot_kernel.c.o boot_kernel.c gcc -Wall -O3 -fstrength-reduce -fomit-frame-pointer -finline-functions -nostdinc -fno-builtin -march=i386 -I./kernel/include -c -o obj/boot_system.c.o boot_system.c nasm -felf -o obj/boot_system.asm.o boot_system.asm for i in kernel/ kernel/interrupt kernel/driver kernel/memory; do make -c $i; done make: invalid option -- c Syntax: make [Optionen] [Target] ... Optionen: -b, -m Aus Kompatibilitätsgründen ignoriert -B, --always-make Alle Ziele ohne Bedingungen erstellen -C VERZEICHNIS, --directory=VERZEICHNIS In VERZEICHNIS wechseln, bevor etwas getan wird -d Print lots of debugging information. --debug[=FLAGS] Print various types of debugging information. -e, --environment-overrides Umgebungsvariablen überschreiben »make«-Steuerdateien -f DATEI, --file=DATEI, --makefile=DATEI DATEI als »make«-Steuerdatei lesen -h, --help Diese Meldung ausgeben und beenden -i, --ignore-errors Ignore errors from commands. -I VERZEICHNIS, --include-dir=VERZEICHNIS VERZEICHNIS nach inkludierten »make«-Steuerdateien durchsuchen -j [N], --jobs[=N] Allow N jobs at once; infinite jobs with no arg. -k, --keep-going Keep going when some targets can't be made. -l [N], --load-average[=N], --max-load[=N] Bleibe bei nur einem einzigen Job bis die Last unter N fällt. -L, --check-symlink-times Use the latest mtime between symlinks and target. -n, --just-print, --dry-run, --recon Führe die Kommandos nicht wirlich aus; zeige sie nur an. -o DATEI, --old-file=DATEI, --assume-old=DATEI Erachte DATEI als alt und verarbeite sie nicht von Neuem. -p, --print-data-base Print make's internal database. -q, --question Run no commands; exit status says if up to date. -r, --no-builtin-rules Disable the built-in implicit rules. -R, --no-builtin-variables Disable the built-in variable settings. -s, --silent, --quiet Befehle nicht ausgeben. -S, --no-keep-going, --stop -k abschalten. -t, --touch Touch targets instead of remaking them. -v, --version Print the version number of make and exit. -w, --print-directory Print the current directory. --no-print-directory Turn off -w, even if it was turned on implicitly. -W DATEI, --what-if=DATEI, --new-file=DATEI, --assume-new=DATEI Erachte DATEI als unendlich neu. --warn-undefined-variables Warn when an undefined variable is referenced. Dieses Programm wurde erstellt für i486-pc-linux-gnu Fehlermeldungen (auf Englisch) an <bug-make@gnu.org> senden. make: *** [compile] Fehler 2
Den langen Fehlerblock gibt er für jede Direction aus.
Hier die Makefiles:
1. Makefile (root-path)#start the makefile DIRS = kernel/ kernel/interrupt kernel/driver kernel/memory compile: gcc -Wall -O3 -fstrength-reduce -fomit-frame-pointer -finline-functions -nostdinc -fno-builtin -march=i386 -I./kernel/include -c -o obj/boot_kernel.c.o boot_kernel.c gcc -Wall -O3 -fstrength-reduce -fomit-frame-pointer -finline-functions -nostdinc -fno-builtin -march=i386 -I./kernel/include -c -o obj/boot_system.c.o boot_system.c nasm -felf -o obj/boot_system.asm.o boot_system.asm for i in $(DIRS); do make -c $$i; done
2. Makefile (rules)
CC = /usr/bin/gcc ASM = /usr/bin/nasm CFLAGS = -Wall -O3 -fstrength-reduce -fomit-frame-pointer -finline-functions -nostdinc -fno-builtin -march=i386 -I./kernel/include ASMFLAGS = -felf %.c.o:%.c $(CC) $(CFLAGS) -c -o $< %.asm.c:%.asm $(ASM) $(ASMFLAGS) -o $<
3. Makefile (in den Directories der Source-codes)
include ../Makefile.rules OBJ = gdt.c.o kernel32.c.o all: $(OBJ)
Woran liegt der Fehler?
Danke für eure Hilfe.
Gruß
rizor
-
rizor schrieb:
make: invalid option -- c
Woran liegt der Fehler?
Steht doch da...
-
Ja, aber ich sehe den nicht in den Makefiles.
Das ist mein Problem.
Dass er mit -- c ein Problem hat, dachte ich mir auch schon.
-
btw. solltest du nicht make aus der Makefile aufrufen, sondern $(MAKE). Und das mit dem for ist nicht gut gelöst. Dafür gibt es schönere Wege. Schau einfach mal in das GNU/Make Handbuch.
-
rizor schrieb:
Ja, aber ich sehe den nicht in den Makefiles.
Das ist mein Problem.
Dass er mit -- c ein Problem hat, dachte ich mir auch schon.Schau mal direkt die Zeile über dem Fehler an und dann schau dir nochmal ganz genau dein root-path Makefile an....
-
Es kann nicht ernsthaft so schwer sein in die Liste der möglichen Optionen, die Make selbst noch mit ausgibt, zu schauen, um zu ermitteln, welches die richtige Option statt -c ist, oder?
Selber denken macht schlau!