万能Makefile

经过几天的实验,终于写出来了,

顶层目录的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/

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值