前言
静态模式
静态模式可以更加容易地定义多目标的规则,可以让我们的规则变的更加有弹性和灵活。语法如下
<targets...>:<target-pattern>:<prereq-patterns...>
<commands>
一、例程
如果我们的<target-patten>
定义成%.o
,意思是<targets...>
中都是以.o
为结尾的变量内容,把<prereq-patterns...>
定义成%.c
,意思是将<target-pattern>
的内容进行二次定义。匹配规则是:取<target-pattern>
中的%
(也就是将[.o]
去掉),并为其加上<prereq-patterns...>
中的.c
形成新的集合。所以,我们的“目标模式”或是“依赖模式”中都应该有“%”这个字符。
objects = foo.o bar.o
all:$(objects)
$(objects):%.o:%.c
$(CC) -c $(CFLAGS) %< -o %@
例子中,目标从$(objects)
中获取,%.o
表明要获取以.o
为结尾的目标,也就是foo.o bar.o
,变量objects
的集合的模式。
而依赖模式%c
表明取模式%.o
的%
,也就是foo bar
,并为其加上.c
,变成foo.c bar.c
。
自动化变量%<
表示所有的依赖目标集foo.c bar.c
,%@
表示目标集foo.o bar.o
。
展开如下:
objects = foo.o bar.o
all: foo.o bar.o
foo.o:foo.c
$(CC) -c $(CFLAGS) foo.c -o foo.o
bar.o:bar.c
$(CC) -c $(CFLAGS) bar.o -o bar.c