Makefile复习--Apple的学习笔记

10年前第一次学习Makefile就是这份资料。现在正好在做底层,那么就拿出来复习下。

  1. “.PHONY : all”声明了“all”这个目标为“伪目标”。
  2. “%.o”表明要所有以“.o”结尾的目标,也就是“foo.o bar.o”
  3. “@”表示目标集(也就是“foo.o bar.o”)。
  4. 如果你使用GNU的C/C++编译器,你得用“-MM”参数,不然,“-M”参数会把一些标准库的头文件也包含进来。
  5. 如果make执行时,带入make参数“-n”或“--just-print”,那么其只是显示命令,但不会执行命令,这个功能很有利于我们调试我们的Makefile,看看我们书写的命令是执行起来是什么样子的或是什么顺序的。
  6. 如果你要传递变量到下级Makefile中,那么你可以使用这样的声明:export
  7. 如果我们执行“总控Makefile”时有make参数或是在上层Makefile中定义了这个变量,那么MAKEFILES变量将会是这些参数,并会传递到下层Makefile中,这是一个系统级的环境变量。
  8. 还有一个在“嵌套执行”中比较有用的参数,“-w”或是“--print-directory”会在make的过程中输出一些信息,让你看到目前的工作目录。
  9. include_dirs
    CFLAGS = (var:a=b)”或是“(foo:%.o=%.c)也是替换
  10. 如果make指定了“-e”参数,那么,系统环境变量将覆盖Makefile中定义的变量,不推荐把许多的变量都定义在系统环境中。
  11. 变量可以定义在某个目标上。模式变量的好处就是,我们可以给定一种“模式”,可以把变量定义在符合这种模式的所有目标上。
  12. 条件判断ifeq/ifneq/ifdef
  13. 常用函数subst、patsubst、strip、findstring、filter、filter-out、wordlist、notdir、suffix、join
  14. $(foreach ,,)
  15. $(if ,)
  16. call函数

你可能感兴趣的:(Makefile复习--Apple的学习笔记)