通用型Makefile的笔记



一: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)



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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值