让make自动推导

GNU的make很强大,它可以自动推导文件以及文件依赖关系后面的命令,于是我们就没必要去在每一个.o 文件后都写上类似的命令,因为,我们的make会自动识别,并自己推导命令。

只要make看到一个 .o 文件,它就会自动的把 .c 文件加在依赖关系中,如果make找到一个whatever.o ,那么 whatever.c 就会是 whatever.o 的依赖文件。并且cc -c whatever.c 也会被推导出来,于是,我们的makefile再也不用写得这么复杂。我们的新makefile又出炉了。

  1. objects = main.o kbd.o command.o display.o \
  2. insert.o search.o files.o utils.o
  3.  
  4. edit : $(objects)
  5. cc -o edit $(objects)
  6.  
  7. main.o : defs.h
  8. kbd.o : defs.h command.h
  9. command.o : defs.h command.h
  10. display.o : defs.h buffer.h
  11. insert.o : defs.h buffer.h
  12. search.o : defs.h buffer.h
  13. files.o : defs.h buffer.h command.h
  14. utils.o : defs.h
  15.  
  16. .PHONY : clean
  17. clean :
  18. rm edit $(objects)

这种方法,也就是make的“隐晦规则”。上面文件内容中, .PHONY 表示 clean 是个伪目标文件。

关于更为详细的“隐晦规则”和“伪目标文件”,我会在后续给你一一道来。