Makefile的两条关键规则

来源:互联网 发布:php2017行情知乎 编辑:程序博客网 时间:2024/06/04 19:42

假如有Makefile如下:

  1. A: B 
  2.     cmd groups one
  3. B: C
  4.     cmd groups two
  5. A: D
  • 一个目标,可以定义多次依赖关系,但只能定义一次构建命令组(cmd groups)。例如:
         A的依赖关系分别在(1)、(5)行,定义了两次。但A的构建命令组,只在(2)处进了定义(命令组可以有多行,这里(2)行只是抽象表示)。由于make程序里,会为每个目标建立一张一对多的依赖关系表,所以可以多次定义依赖关系。
         但cmd groups只应定义一次---既然是cmd groups,即可在这个groups中放多个命令,故没有必要定义多次。若允许定义多次,其执行次序受依赖关系的影响而出现不可控,会滋生众多问题,这也许是make禁用此方式的原因。
  • make会递归的把当前目标的依赖当作子目标,而检查子目标们的依赖关系,而不是遇到目标比较其依赖新,就停止递归检查。例如:
         若A比B新,make A命令仍然会检查B的依赖(因为make并不是首先检查A与B的时间关系,而是先递归检查B的依赖),即执行(3)行的检查,若B比C新(C已经没有依赖,不再递归检查),会执行cmd groups two。执行完后返回到(1),发现A比B新,就不会执行cmd groups one了。
     
原创粉丝点击