一:Makefile
/*交叉编译工具*/
CROSS_COMPILE = arm-linux-
AS = $(CROSS_COMPILE)as
LD = $(CROSS_COMPILE)ld
CC = $(CROSS_COMPILE)gcc
CPP = $(CC) -E
AR = $(CROSS_COMPILE)ar
NM = $(CROSS_COMPILE)nm
STRIP = $(CROSS_COMPILE)strip
OBJCOPY = $(CROSS_COMPILE)objcopy
OBJDUMP = $(CROSS_COMPILE)objdump
export AS LD CC CPP AR NM
export STRIP OBJCOPY OBJDUMP //使用这些变量可以使用编译工具连
CFLAGS := -Wall -O2 -g //指定优化选项wall所有的警告都列出来-o2优化选项 -g调试信息=:表示延时账号
CFLAGS += -I $(shell pwd)/include //指定系统目录去include目录下面去找头文件-I指定系统目录 $(shell pwd):得到当前目录
LDFLAGS := -lm -lfreetype //连接参数
export CFLAGS LDFLAGS //导出
TOPDIR := $(shell pwd)
export TOPDIR
TARGET := show_file
//TARGET := built-in.o //TARGET依赖于当前目录下的 built-in.o
obj-y += main.o
obj-y += display/
obj-y += draw/
obj-y += encoding/
obj-y += fonts/
all :
make -C ./ -f $(TOPDIR)/Makefile.build //make -C ./进入当前目录用Makefile.build来编译
$(CC) $(LDFLAGS) -o $(TARGET) built-in.o //如果有了当前目录下的built-in.o 我们就把他连接起来
clean:
rm -f $(shell find -name "*.o")
rm -f $(TARGET)
distclean:
rm -f $(shell find -name "*.o")
rm -f $(shell find -name "*.d") //依赖项删除掉
rm -f $(TARGET)
二:Makefile.build
PHONY := __build
__build: //make进来想生成__build
obj-y :=
subdir-y :=
include Makefile //当前目录下的makefile
# obj-y := a.o b.o c/ d/
# $(filter %/, $(obj-y)) : c/ d/
# __subdir-y : c d
# subdir-y : c d
__subdir-y := $(patsubst %/,%,$(filter %/, $(obj-y))) //从obj-y这个文件中过滤掉不符合%/格式文件去掉 执行patsubst 会把%/ 替换成%,就得到了C和d
subdir-y += $(__subdir-y) //subdir-y 之目录取出来了
# c/built-in.o d/built-in.o
subdir_objs := $(foreach f,$(subdir-y),$(f)/built-in.o)
# a.o b.o
cur_objs := $(filter-out %/, $(obj-y)) //从obj-y文件里面找到%/不符合的留下,符合去掉
dep_files := $(foreach f,$(cur_objs),.$(f).d)
dep_files := $(wildcard $(dep_files)) //找到依赖文件
ifneq ($(dep_files),)
include $(dep_files) //如果依赖文件存在我们就把它包含进来
endif
PHONY += $(subdir-y)
__build : $(subdir-y) built-in.o //生成__build依赖于澹(subdir-y)目录下的built-in.o
$(subdir-y):
make -C $@ -f $(TOPDIR)/Makefile.build //用顶层目录下的Makefile.build 去编译子目录的文件
built-in.o : $(cur_objs) $(subdir_objs) //生成built-in.o依赖于
$(LD) -r -o $@ $^
dep_file = .$@.d
%.o : %.c
$(CC) $(CFLAGS) -Wp,-MD,$(dep_file) -c -o $@ $<
.PHONY : $(PHONY)