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: 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会被最先依赖,其他的依赖则按照定义时候的顺序。

猜你喜欢

转载自blog.csdn.net/jingerppp/article/details/130321879
今日推荐