2个阶段 1.make会读进makefile以及被引入的任何其他makefile,这时变量和规则都会被加载进入make的内部数据库,建立依存图 2.make会分析依存图并且判断需要跟新的工作目标然后执行脚本已完成所需要的更新动作。 下面例子 $(OUTPUT_DIR)/very_big_file会被立即扩展,因为工作目标和必要条件中所用到的变量会被立即扩展,接着make继续读取makefile,$(free-space)不会被扩展,而是读取并将之存储起来。 宏free-space会被立即扩展,当然这里不需要扩展,但是宏里面具体内容不会被立即扩展而是存储起来。 接下来BIN、PRINTF、DF、AWK会被立即扩展,因为他们都是简单变量 最后执行make整个规则变成下面这样
如 注意,条件指令前不是shell命令,不要有tab键,而ifeq ifneq只能忽略都好之后的空格,要注意空格问题,可以使用strip函数
一个makefile可以引入其他文件,用include,当没有这个文件时make会汇报问题继续读取剩余makefile,当读完后找到更新要include文件的规则,找不到就报错(如果想忽略的话就用sinclude),找到的话则清除内部数据库并重新make。 include文件路径问题 如果include的参数时绝对路径则直接读取该文件,如果时相对路径则make先到当前路径查找,找不到的话就到你make命令行-I选项指定路径目录继续查找。
