经过几天的实验,终于写出来了,
顶层目录的Makefile
CROSS_COMPILE ?= arm-linux-
CC = $(CROSS_COMPILE)gcc
LD = $(CROSS_COMPILE)ld
TOPDIR = $(shell pwd)
CFLAGS := -Wall -O2 -lfreetype -lpng
LDFLAGS :=
CFLAGS += -I $(TOPDIR)/include
export CC LD TOPDIR CFLAGS LDFLAGS
obj-y := main.o
obj-y += display/
obj-y += draw/
obj-y += encoding/
obj-y += fonts/
TARGET := show_file
all :
make -C ./ -f $(TOPDIR)/Makefile.built
$(CC) $(CFLAGS) -o $(TARGET) built-in.o
clean:
rm -f $(shell find -name "*.o")
rm -f $(shell find -name "*.d")
rm -f $(shell find -name "built-in.o")
rm -f show_file
顶层目录的Makefile.built
PHONY := __build
__build:
obj-y :=
subdir-y :=
include Makefile
subdir-y += $(__subdir-y)
subdir-y +=$(patsubst %/, % ,$(filter %/ , $(obj-y)) )
cur_obj := $(filter-out %/, $(obj-y))
DEPEND := $(wildcard %d)
sub_obj := $(foreach f,$(subdir-y),$(f)/built-in.o)
SOURCES := $(patsubst %.o,%.c,$(cur_obj))
PHONY += $(subdir-y)
__build : $(subdir-y) built-in.o
$(subdir-y):
make -C $@ -f $(TOPDIR)/Makefile.built
built-in.o : $(cur_obj) $(sub_obj)
$(LD) -r -o $@ $^
%.o : %.c %d
$(CC) $(CFLAGS) -MM $(<:.c=.d) -c -o $@ $^
%d : %c
$(CC) $(CFLAGS) -MM $< > $@
.PHONY : $(PHONY)
其他子目录的Makefile
obj-y += disp_manager.o
obj-y += fb.o
obj-y += test/