Makefile 例子

2018-12-01  本文已影响12人  半步江南

C_SOURCES = (wildcard kernel/*.c drivers/*.c) HEADERS =(wildcard kernel/.h drivers/.h)

Nice syntax for file extension replacement

OBJ = ${C_SOURCES:.c=.o}

Change this if your cross-compiler is somewhere else

CC = /usr/local/i386elfgcc/bin/i386-elf-gcc
GDB = /usr/local/i386elfgcc/bin/i386-elf-gdb

-g: Use debugging symbols in gcc

CFLAGS = -g

First rule is run by default

os-image.bin: boot/bootsect.bin kernel.bin
cat $^ > os-image.bin

'--oformat binary' deletes all symbols as a collateral, so we don't need

to 'strip' them manually on this case

kernel.bin: boot/kernel_entry.o {OBJ} i386-elf-ld -o@ -Ttext 0x1000 $^ --oformat binary

Used for debugging purposes

kernel.elf: boot/kernel_entry.o {OBJ} i386-elf-ld -o@ -Ttext 0x1000 $^

run: os-image.bin
qemu-system-i386 -fda os-image.bin

Open the connection to qemu and load our kernel-object file with symbols

debug: os-image.bin kernel.elf
qemu-system-i386 -s -fda os-image.bin &
${GDB} -ex "target remote localhost:1234" -ex "symbol-file kernel.elf"

Generic rules for wildcards

To make an object, always compile from its .c

%.o: %.c {HEADERS}{CC} {CFLAGS} -ffreestanding -c< -o $@

%.o: %.asm
nasm < -f elf -o@

%.bin: %.asm
nasm < -f bin -o@

clean:
rm -rf .bin .dis .o os-image.bin .elf
rm -rf kernel/
.o boot/
.bin drivers/
.o boot/
.o

C_SOURCES = $(wildcard kernel/.c drivers/.c)

#${C_SOURCES}==wildcard kernel/*.c drivers/*.c

HEADERS = $(wildcard kernel/.h drivers/.h)

#${HEADERS}==wildcard kernel/*.h drivers/*.h

OBJ = ${C_SOURCES:.c=.o}

      #
上一篇下一篇

猜你喜欢

热点阅读