uboot Makefile 分析

来源:互联网 发布:软件功能过期怎么办 编辑:程序博客网 时间:2024/06/15 19:47

uboot Makefile 分析

makefile基础

简单示例:#samplemain.o:main.c defs.h    cc -c main.cclean:    rm *.*  

包含其他makefile

include FILENAMESinclude指示符用于make暂停读取当前Makefile,转而去读取inlcude制定的文件,完成后再继续当前的makefile读取

[Tab]字符开始make程序将此行作为一个命令行来处理
变量 MAKEFILES
变量 MAKEFILE_LIST
makefile普通规则

makefile模式规则

%.o : %.c$(CC) -c $(CFLAGS) $(CPPFLAGS) $< -o $@此规则描述了一个.o文件如何由对应的.c文件创建。规则的命令行中使用了自动化变量“ $<”和“ $@”,其中自动化变量“ $<”代表规则的依赖,“ $@”代表规则的目标。此规则在执行时,命令行中的自动化变量将根据实际的目标和依赖文件取对应值。

依赖类型:常规依赖与order-only依赖

LIBS = libtest.afoo : foo.c | $(LIBS)$(CC) $(CFLAGS) $< -o $@ $(LIBS)规则中依赖文件$(LIBS)只有在目标文件不存在的情况下,才会参与规则的执行。当目标文件存在时此依赖不会参与规则的执行过程

变量
变量是一个名字(像是 C 语言中的宏),代表一个文本字符串(变
量的值)

objects = program.o foo.o utils.oprogram : $(objects)cc -o program $(objects)$(objects) : defs.h
变量的替换引用,格式为“ $(VAR:A=B)”(或者“ ${VAR:A=B}”),foo := a.o b.o c.obar := $(foo:.o=.c)变量“ bar”的值就为“ a.c b.c c.c”。
:   以冒号开头表示注释@   以@开头表示命令执行的时候不显示命令本身自动化变量$@  表示规则的目标文件名$<  规则的第一个依赖文件名$^  规则的所有依赖文件列表$?  所有比目标文件更新的依赖文件列表,空格分割$%  当规则的目标文件是一个静态库文件时,代表静态库的一个成员名$(@D) 表示目标文件的目录部分(不包括斜杠)$(@F) 目标文件的完整文件名中除目录以外的部分(实际文件名)$(*D) $(*F) 分别代表目标“茎”中的目录部分和文件名部分$(<D) $(<F) 分别表示规则中第一个依赖文件的目录部分和文件名部分$(^D) $(^F) 分别表示所有依赖文件的目录部分和文件部分(不存在同一文件)$(+D) $(+F) 分别表示所有依赖文件的目录部分和文件部分(可存在重复文件)。$(?D) $(?F) 分别表示被更新的依赖文件的目录部分和文件名部分
0 0
原创粉丝点击