日期:2014-05-16  浏览次数:20595 次

求解 Makefile 伪目标的疑惑
陈皓的跟我一起写makefile中有这么一段
我们知道,Makefile中的第一个目标会被作为其默认目标。我们声明了一个“all”的伪目标,其依赖于其它三个目标。由于伪目标的特性是,总是被执行的,所以其依赖的那三个目标就总是不如“all”这个目标新。所以,其它三个目标的规则总是会被决议。也就达到了我们一口气生成多个目标的目的。“.PHONY : all”声明了“all”这个目标为“伪目标”。
  all : prog1 prog2 prog3
  .PHONY : all

  prog1 : prog1.o utils.o
  cc -o prog1 prog1.o utils.o

  prog2 : prog2.o
  cc -o prog2 prog2.o

  prog3 : prog3.o sort.o utils.o
  cc -o prog3 prog3.o sort.o utils.o

疑惑的是红字部分“其它三个目标的规则总是会被决议,也就达到了我们一口气生成多个目标的目的”
按照我的理解,只有依赖文件比目标文件新时才会执行,既然那三个文件不如all这个目标新,为什么会产生这三个文件呢?

------解决方案--------------------
探讨

迷惑中。。。
因为伪目标会被执行,所以肯定比依赖文件新
但是make的工作过程是先比较依赖文件和目标文件,只有依赖文件比目标文件新时才会执行命令
照这个思路all总是比prog1,2,3新的,所以prog作为目标时,便不再被更新,即cc -o prog1 prog1.o utils.o 不会被执行,这样的话怎么产生这三个文件呢

高手给个清晰的解释吧,谢谢