study makefile
时间:2007-01-17 来源:hanly_han
最近在看一个比较的系统代码,糊里糊涂的不知道如何去理顺,经高人指点;说是从makefile看起,先慢慢来吧:
make的执行过程如下:
1. 依次读取变量“MAKEFILES”定义的makefile文件列表
2. 读取工作目录下的makefile文件(根据命名的查找顺序“GNUmakefile”,“makefile”,“Makefile”,首先找到那个就读取那个)
3. 依次读取工作目录makefile文件中使用指示符“include”包含的文件
4. 查找重建所有已读取的makefile文件的规则(如果存在一个目标是当前读取的某一个makefile文件,则执行此规则重建此makefile文件,完成以后从第一步开始重新执行)
5. 初始化变量值并展开那些需要立即展开的变量和函数并根据预设条件确定执行分支
6. 根据“终极目标”以及其他目标的依赖关系建立依赖关系链表
7. 执行除“终极目标”以外的所有的目标的规则(规则中如果依赖文件中任一个文件的时间戳比目标文件新,则使用规则所定义的命令重建目标文件)
8. 执行“终极目标”所在的规则 example: foo := a.o b.o c.o
all :$(foo)
@echo aaabbbccc
.PHONY : all
.PHONY : a.o
.PHONY : b.o
a.o:
@echo aaaa
b.o:
@echo bbbb
c.o:
@echo cccc
clean :
echo Hello World!
当在shell输入make命令的时候输出的顺序为: aaaa bbbb cccc aaabbbccc make a.o >aaaa
1. 依次读取变量“MAKEFILES”定义的makefile文件列表
2. 读取工作目录下的makefile文件(根据命名的查找顺序“GNUmakefile”,“makefile”,“Makefile”,首先找到那个就读取那个)
3. 依次读取工作目录makefile文件中使用指示符“include”包含的文件
4. 查找重建所有已读取的makefile文件的规则(如果存在一个目标是当前读取的某一个makefile文件,则执行此规则重建此makefile文件,完成以后从第一步开始重新执行)
5. 初始化变量值并展开那些需要立即展开的变量和函数并根据预设条件确定执行分支
6. 根据“终极目标”以及其他目标的依赖关系建立依赖关系链表
7. 执行除“终极目标”以外的所有的目标的规则(规则中如果依赖文件中任一个文件的时间戳比目标文件新,则使用规则所定义的命令重建目标文件)
8. 执行“终极目标”所在的规则 example: foo := a.o b.o c.o
all :$(foo)
@echo aaabbbccc
.PHONY : all
.PHONY : a.o
.PHONY : b.o
a.o:
@echo aaaa
b.o:
@echo bbbb
c.o:
@echo cccc
clean :
echo Hello World!
当在shell输入make命令的时候输出的顺序为: aaaa bbbb cccc aaabbbccc make a.o >aaaa
相关阅读 更多 +