1,Makefile结构
[target]: [prerequisite]
command
每个命令行必须以一个tab字符开头。
每个命令在属于自己的 Shell 中运行(译者:意思是每个 Shell 命令都是一个单独的进程),所以要注意:在使用像 cd 这样的命令时,它不会对后面的行造成影响。
伪目标phony target,如all, clean等。
2,make 有宏(macro)的概念
当宏被引用时就会被展开为字符串。传统上,使用叫做CC的宏表示 C 编译器,CFLAGS表示传递给 C 编译器的标志,LDFLAGS表示当 C 编译器链接时的标志,LDLIBS表示库链接时的标志。Makefile 应该在需要时提供默认值。
一个宏通过 $(...) 进行展开。引用一个尚未定义的宏是有效(也是常见)的,未定义的宏会被展开为一个空字符串。这就是下面的 LDFLAGS 情况。宏的值可以包含其他宏,每当宏被展开时,它们会被递归展开。
3,推断规则inference rule
.SUFFIXES: .c .o
.c.o:
$(CC) $(CFLAGS) -c $<
第一个空的 .SUFFIXES 会清空后缀列表(suffix list). 第二个 .SUFFIXES 将 .c 和 .o 加到现在是空的后缀列表中。
本文节选自:
作者:liuchengxu
链接:https://www.jianshu.com/p/9bbfd0a61fc2
來源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
网友评论