makefile 中经常会使用规则的覆盖,同样一个target 可能有多个prerequisites,这种依赖关系可以放到一起,也可以分开指定。
例1:
test1:
@echo "test111"
test2:
@echo "test222"
test3:
@echo "test333"
hehe: test1 test2 test3
@echo "get hehe"
test: hehe
上面例子,对于target hehe,有多个prerequisites: test1 test2 和test3,make的时候会依次解析依赖目标。
运行后的结果为:
这里的规则:
hehe: test1 test2 test3
也是可以分开制定。
例2:
test1:
@echo "test111"
test2:
@echo "test222"
test3:
@echo "test333"
hehe: test1
hehe: test2
hehe: test3
@echo "get hehe"
test: hehe
这样的运行结果:
可以看到 例1 和 例2 中的结果是一样的。
从上面两个例子看到对于目标 hehe,command只有一处使用,如果换成两个command会有什么现象呢?
例3:
test1:
@echo "test111"
test2:
@echo "test222"
test3:
@echo "test333"
hehe: test1
@echo "11111"
hehe: test2
@echo "22222"
hehe: test3
test: hehe
来看下运行结果:
从结果我们得出结论:
- makefile 规则中同一个目标的不同依赖是可以分开指定;
- makefile 规则中依赖关系是可以叠加的,但是命令只能覆盖;
- makefile 第一个依赖目标是根据最终的命令确定,其他依赖是按照顺序;
通过例3,确定最终的 command 是 echo 22222,此刻依赖目标为 test2,所以test2会作为 hehe 的第一个依赖目标,其他按照定义时候的顺序。
例4:
test1:
@echo "test111"
test2:
@echo "test222"
test3:
@echo "test333"
hehe: test1
hehe: test2
hehe: test3
@echo "3333"
test: hehe
来看下运行结果:
从例子中虽然test3是最后依赖,但是由于command的缘故,test3会被最先依赖,其他的依赖则按照定义时候的顺序。