- 论坛徽章:
- 0
|
- make的执行过程如下:
- 1. 依次读取变量“MAKEFILES”定义的makefile文件列表
- 2. 读取工作目录下的makefile文件(根据命名的查找顺序“GNUmakefile”,“makefile”,“Makefile”,首先找到那个就读取那个)
- 3. 依次读取工作目录makefile文件中使用指示符“include”包含的文件
- 4. 查找重建所有已读取的makefile文件的规则(如果存在一个目标是当前读取的某一个makefile文件,则执行此规则重建此makefile文件,完成以后从第一步开始重新执行)
- 5. 初始化变量值并展开那些需要立即展开的变量和函数并根据预设条件确定执行分支
- 6. 根据“终极目标”以及其他目标的依赖关系建立依赖关系链表
- 7. 执行除“终极目标”以外的所有的目标的规则(规则中如果依赖文件中任一个文件的时间戳比目标文件新,则使用规则所定义的命令重建目标文件)
- 8. 执行“终极目标”所在的规则
复制代码 这是很多地方说的makefile的执行顺序。
但是下面的makefile:- $(shell echo CFLAGS+=-D_LINUX__ > tt)
- include tt
- all:
- @echo "[$(CFLAGS)]"
复制代码 在没有tt文件的情况下, 执行make, 按先inlude ,再展开变量的说法, 这个时候CFLAGS应该是空的, 但是实际上CFLAGS的值是-D_LINUX__
这里面是不是还有什么我不知道的东西?望指教!! |
|