> 文章列表 > makefile 规则的覆盖

makefile 规则的覆盖

makefile 规则的覆盖

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 中的结果是一样的。

从上面两个例子看到对于目标 hehecommand只有一处使用,如果换成两个command会有什么现象呢?

例3: 

test1:@echo "test111"test2:@echo "test222"test3:@echo "test333"hehe: test1@echo "11111"
hehe: test2@echo "22222"
hehe: test3test: 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会被最先依赖,其他的依赖则按照定义时候的顺序。