4.编写一个通用的 Makefile :-)
2017-08-23 22:17
459 查看
1<. 必须要知道的 shell 命令
include1<. 解释:
$(shell pwd)
(patsubst(filter %/, $(obj-y)))
(foreachf,(subdir-y),$(f)/built-in.o)
(filter−out(obj-y))
(foreachf,(cur_objs),.$(f).d)
(wildcard(dep_files))
示例代码:
1<. 顶层目录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 -Werror -O2 -g CFLAGS += -I $(shell pwd)/include LDFLAGS := -lm -lfreetype -lts -lpthread -ljpeg export CFLAGS LDFLAGS TOPDIR := $(shell pwd) export TOPDIR TARGET := digitpi a095 c obj-y += main.o obj-y += display/ obj-y += encoding/ obj-y += fonts/ obj-y += input/ obj-y += debug/ obj-y += render/ obj-y += page/ obj-y += file/ all : make -C ./ -f $(TOPDIR)/Makefile.build $(CC) $(LDFLAGS) -o $(TARGET) 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: obj-y := subdir-y := include 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))) 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)) 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 $(subdir-y): make -C $@ -f $(TOPDIR)/Makefile.build built-in.o : $(cur_objs) $(subdir_objs) $(LD) -r -o $@ $^ dep_file = .$@.d %.o : %.c $(CC) $(CFLAGS) -Wp,-MD,$(dep_file) -c -o $@ $< .PHONY : $(PHONY)
2<. 子目录下的 Makefile
obj-y += page_manager.o obj-y += main_page.o obj-y += setting_page.o obj-y += interval_page.o obj-y += browse_page.o obj-y += auto_page.o obj-y += manual_page.o
相关文章推荐
- 一个通用Makefile的编写
- 一个通用Makefile的编写
- 一个通用Makefile的编写
- C/C++ 编写一个通用的Makefile 来编译.c .cpp 或混编
- 编写一个通用的Makefile文件
- 一个通用Makefile的编写
- 一个通用Makefile的编写
- 一个通用Makefile的编写
- 一个通用Makefile的编写
- 一个通用Makefile的编写
- 一个通用Makefile的编写
- 编写一个简单通用的makefile
- 一个通用Makefile的编写
- 一个通用Makefile的编写
- 一个通用Makefile的编写
- 一个通用Makefile的编写
- 一个通用makefile的编写
- 编写一个简单通用的makefile
- 一个通用Makefile的编写
- 一个通用的Makefile