操作系统实践之使用Makefile

  通过命令行进行编译是在太麻烦,使用Makefile就方便多了,下面这个MakeFile将编译boot.bin(引导程序)

loader.bin(加载程序)和Kernel.bin(操作系统内核),编写过程比较简单,需要主要的是编译命令前需要有一个Tab键作为空格,否则好像执行不了,比如 (这里是一个Tab键)$(ASM) $(ASMBFLAGS) -o $@ $<。

# Makefile for os

# Entry point of kernel
ENTRYPOINT      = 0x30400

# Programs, flags, etc.
ASM  = nasm
ASMBFLAGS = -I boot/include
ASMKFLAGS = -I ./include -f elf
LD              = ld
CC              = gcc
CFLAGS          = -I ./include -c -fno-builtin
LDFLAGS         = -s -Ttext $(ENTRYPOINT) 

# This Program
TINIXBOOT  = boot/boot.bin boot/loader.bin
TINIXKERNEL             = kernel.bin
OBJS                    = kernel/kernel.o kernel/start.o lib/klib.o lib/string.o

# All Phony Targets
.PHONY : everything clean all

# Default starting position
everything : $(OBJS) $(TINIXBOOT) $(TINIXKERNEL)

clean :
 rm -f  $(OBJS)  $(TINIXBOOT) $(TINIXKERNEL)

all : clean everything

boot/boot.bin : boot/boot.asm boot/include/load.inc boot/include/fat12hdr.inc
 $(ASM) $(ASMBFLAGS) -o $@ $<

boot/loader.bin : boot/loader.asm boot/include/load.inc boot/include/fat12hdr.inc boot/include/pm.inc boot/include/lib.inc
 $(ASM) $(ASMBFLAGS) -o $@ $<

kernel.bin: $(OBJS)
 $(LD) $(LDFLAGS) -o $@ $(OBJS)
       
kernel/kernel.o: kernel/kernel.asm
 $(ASM) $(ASMKFLAGS) -o $@ $<
       
kernel/start.o: kernel/start.c ./include/type.h ./include/const.h ./include/protect.h
 $(CC) $(CFLAGS) -o $@ $<

lib/klib.o: lib/klib.asm
 $(ASM) $(ASMKFLAGS) -o $@ $<

lib/string.o: lib/string.asm
 $(ASM) $(ASMKFLAGS) -o $@ $<

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值