Makefile之执行过程
1. 依次读取变量“MAKEFILES”定义的makefile文件列表
2. 读取工作目录下的makefile文件(根据命名的查找顺序“GNUmakefile”,“makefile”,“Makefile”,首先找到那个就读取那个)
3. 依次读取工作目录makefile文件中使用指示符“include”包含的文件
4. 查找重建所有已读取的makefile文件的规则(如果存在一个目标是当前读取的某一个makefile文件,则执行此规则重建此makefile文件,完成以后从第一步开始重新执行)
5. 初始化变量值并展开那些需要立即展开的变量和函数并根据预设条件确定执行分支
6. 根据“终极目标”以及其他目标的依赖关系建立依赖关系链表
7. 执行除“终极目标”以外的所有的目标的规则(规则中如果依赖文件中任一个文件的时间戳比目标文件新,则使用规则所定义的命令重建目标文件)
8. 执行“终极目标”所在的规则
Makefile之模式规则
模式规则其实也是普通规则,但它使用了如%这样的通配符。如下面的例子:
%.o : %.c
$(CC) -c $(CFLAGS) $(CPPFLAGS) $< -o [email protected]
此规则描述了一个.o文件如何由对应的.c文件创建。规则的命令行中使用了自动化变量“$<”和“[email protected]”,其中自动化变量“$<”代表规则的依赖,“[email protected]”代表规则的目标。此规则在执行时,命令行中的自动化变量将根据实际的目标和依赖文件取对应值。
Makefile之隐式规则
如果发现某变量在shell和makefile中未找不到其定义,那么恭喜你,你极大可能遇到隐式规则了。当然隐式规则中的变量只是隐式规则的一部分。