下面就来编写MAKEFILE吧,首先在GCC中有一个选项很不错,就是-M,用来确定依赖关系:
比如下面这条指令:
gcc -M -I ./include ./kernel/start.c
可得下列输出:
这使得MAKEFILE的编写更简便了。
MAKEFILE如下:
#Makefile for kernel.bin
KERNEL_ENTRY = 0x30400
ASM = nasm
CC = gcc
LD = ld
ASMFLAGS = -f elf
CFLAGS = -c -I ./include
LDFLAGS = -s -Ttext $(KERNEL_ENTRY)
OBJS = ./kernel/kernel.o ./kernel/start.o ./kernel/global.o ./kernel/i8259.o ./kernel/protect.o ./lib/kliba.o ./lib/klib.o
.PHONY : everything all clean umount
everything : ./kernel.bin
clean :
rm -f $(OBJS)
umount :
cd ..
umount /mnt/floppy
all : everything clean
./kernel.bin : $(OBJS)
$(LD) $(LDFLAGS) -o $@ $(OBJS)
./kernel/kernel.o : ./kernel/kernel.asm
$(ASM) $(ASMFLAGS) -o $@ $<
./kernel/start.o : ./kernel/start.c ./include/type.h ./include/proto.h ./include/protect.h ./include/global.h
$(CC) $(CFLAGS) -o $@ $<
./kernel/global.o : ./kernel/global.c ./include/type.h ./include/protect.h
$(CC) $(CFLAGS) -o $@ $<
./kernel/i8259.o : ./kernel/i8259.c ./include/type.h ./include/proto.h
$(CC) $(CFLAGS) -o $@ $<
./kernel/protect.o : ./kernel/protect.c ./include/type.h ./include/proto.h ./include/protect.h ./include/global.h
$(CC) $(CFLAGS) -o $@ $<
./lib/kliba.o : ./lib/kliba.asm
$(ASM) $(ASMFLAGS) -o $@ $<
./lib/klib.o : ./lib/klib.c ./include/type.h ./include/proto.h
$(CC) $(CFLAGS) -o $@ $<
由于我们先前已经生成了kernel.bin和相关的目标文件,所以在make的时候会显示:
所以先clean一下,再make:
OK,我们的MAKEFILE就写到这了。我们已经彻底完成了第五章的任务。可以自豪而又充满信心的走向进程了。