Sunplus DVD软件Makefile详解(三)<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />
子模块的Makefile
下面以system目录下Makefile为例:
1 #
2 # Makefile system
3 # Other system related files
4 #
5 sinclude ../Makefile.sutl
6
7 GOAL = libsys.a
8
9 INCLUDE_DIR = -<?xml:namespace prefix = st1 ns = "urn:schemas-microsoft-com:office:smarttags" />I. -I../ -I../h -I../ir_vfd -I../emu/ -I../dsp3 -I../fs
10 CFLAGS_COMPILE = -ffunction-sections
11
12 # generic flags
13 SOURCES = \
14 reset.c \
15 sysmain.c \
16 memcfg.c \
17 polling.c \
18 polling_fast.c \
19 util.c \
20 hwif.c \
21 sleep.c \
22
23 DEPENDS_C = \
24 $(addprefix MIPS/,$(SOURCES:.c=.d))
25
26 DEPENDS = $(DEPENDS_C)
27
28 OBJS = $(DEPENDS:.d=.o)
29 ASMS = $(DEPENDS:.d=.s))
30 DISASMS = $(DEPENDS:.d=.dis))
31
32 # main target
33 all: $(GOAL)
34 @$(ECHO) \"$(GOAL) made\"
35
36 $(GOAL): MIPS $(OBJS) force
37 @$(ECHO) \"update library..\"
38 @$(XAR) -cr $(GOAL) $(OBJS)
39
40 ifneq ($(MAKECMDGOALS),clean)
41 sinclude $(DEPENDS)
42 endif
43
5)通过根目录下的文件将核心Makefile文件(Makefile.ult)包含进来。
7)定义编译过程的最终输出文件的名称为libsys.a。
9)定义Source Code包含文件的搜索路径。
10)列举输入的Source Code文件名。
23~26)指明在目录MIPS下为每个输入的.c文件建立一个同名的.d文件(将后缀名由.c替换成.d)。每个.d的生成规则定义在文件Makefile.ult中第98~101行。这里是利用gcc的-M参数为每个输入文件自动生成依赖关系的策略。每个输入文件的依赖关系保存在与它同名的.d文件中,然后将所有.d文件包含进Makefile文件中(见第41行),这样就相当于在Makefile中为每个输入文件指明了它的依赖关系。如果不是采用这种策略,就必须手工在Makefile文件中为每个输入文件写明依赖关系,文件很少的时候还行得通,项目中文件很多的时候会把人累死的。
28)指明在目录MIPS下为每个输入的.c文件建立一个同名的.o文件(将每个.c对应的.d后缀名替换成.o)。
29)为每个.c文件分别生成一个对应的.s和.dis文件,实际没有用到(只定义了规则没有真正执行)。
32~38)定义默认目标的依赖关系,定义输出文件的依赖关系和编译命令。我们前面说过,目标all总会是成为默认目标。$(GOAL)是目标all的依赖,所以目标$(GOAL)也会得到执行。$(OBJS)是$(GOAL)的依赖,目标$(OBJS)也会得到执行。$(OBJS)是前面定义的所有.o文件,他们的依赖关系和编译命令定义在文件Makefile.ult中第103~105行。编译生成这些.o文件后,再借助Binutils中的ar工具将他们打包在一起,形成前面定义的文件libsys.a。
『未完,待续...』
文章评论(0条评论)
登录后参与讨论