Ich habe folgendes makefile, das bestens funktioniert. Ich möchte die Umsetzung c --> o gerne weiter vereinfachen, aber möglichst "leserlich". Habe leider im Internet keine brauchbare Vorlage gefunden:
# Makefile for PrettyOS
ASFLAGS= -O32 -f coff
TARGET= ckernel.bin
OBJ= kernel.o ckernel.o isr.o video.o flush.o gdt.o \
idt.o isrs.o irq.o util.o math.o timer.o keyboard.o \
process.o ordered_array.o paging.o kheap.o descriptor_tables.o \
task.o fs.o initrd.o syscall.o
LDFLAGS= -T kernel.ld -Map kernel.map
LD= ld
CFLAGS= -Wall -O
CC= gcc
all:
nasmw -f bin file_data.asm -o file_data.dat
nasmw -O32 -f bin boot.asm -o boot.bin
nasmw $(ASFLAGS) kernel.asm -o kernel.o
nasmw $(ASFLAGS) isr.asm -o isr.o
nasmw $(ASFLAGS) process.asm -o process.o
nasmw $(ASFLAGS) flush.asm -o flush.o
make compile
make link
make image
compile:
$(CC) $(CFLAGS) -c ckernel.c -o ckernel.o
$(CC) $(CFLAGS) -c video.c -o video.o -O1
$(CC) $(CFLAGS) -c math.c -o math.o -O1
$(CC) -O -c util.c -o util.o -O1
$(CC) $(CFLAGS) -c gdt.c -o gdt.o
$(CC) $(CFLAGS) -c idt.c -o idt.o
$(CC) $(CFLAGS) -c isrs.c -o isrs.o
$(CC) $(CFLAGS) -c irq.c -o irq.o
$(CC) $(CFLAGS) -c timer.c -o timer.o
$(CC) $(CFLAGS) -c keyboard.c -o keyboard.o
$(CC) $(CFLAGS) -c ordered_array.c -o ordered_array.o
$(CC) $(CFLAGS) -c paging.c -o paging.o
$(CC) $(CFLAGS) -c kheap.c -o kheap.o
$(CC) $(CFLAGS) -c descriptor_tables.c -o descriptor_tables.o
$(CC) $(CFLAGS) -c task.c -o task.o
$(CC) $(CFLAGS) -c fs.c -o fs.o
$(CC) $(CFLAGS) -c initrd.c -o initrd.o
$(CC) $(CFLAGS) -c syscall.c -o syscall.o
link:
$(LD) $(LDFLAGS) -o $(TARGET) $(OBJ)
image:
cmd /c copy /b boot.bin + ckernel.bin MyOS
del *.coff
del *.o
del *.bin
cmd /c rename MyOS MyOS.bin
del MyOS
partcopy MyOS.bin 0 7000 -f0
So etws wie
c.o.:
$(CC) -c $(CFLAGS) -o $@ $<
hatte ich schon anhängen, wusste dann aber nicht, wie ich das zum Laufen bekomme.
Ich hätte wegen der Verständlichkeit gerne so etwas in der Art wie:
compile:
??? #Idee: $(CC) $(CFLAGS) -c $(SOURCES) -o $(OBJECTS)
Please help.