Makefile静态规则语法解释

Makefile static rule syntax explaination

这是静态规则的 makefile 代码示例的片段:

objects = foo.o bar.o

all: $(objects)

$(objects): %.o: %.c
        $(CC) -c $(CFLAGS) $< -o $@

这意味着什么:

target : %.o : %.c

这是否意味着 target : %.o 和 %.o : %.c 解释了目标的所有依赖项将由 %.o 规则生成并且配方应用于该规则以及所有依赖项%.o 将由 %.c 规则生成并应用配方?

请有人澄清一下:

1.Whatmakefile中的static规则有语法解释吗?

2.Does 配方适用于 %.o 和 %.c 规则?

3.Is 它连接 target : $(all).o$(all).o : $(all).c 其中 all 包含没有任何扩展名的所有文件名?

您的代码段:

objects = foo.o bar.o

all: $(objects)

$(objects): %.o: %.c
        $(CC) -c $(CFLAGS) $< -o $@

扩展为(扩展变量后):

all: foo.o bar.o

foo.o bar.o: %.o: %.c
        $(CC) -c $(CFLAGS) $< -o $@

这是一个shorthand 写作:

foo.o: foo.c
        $(CC) -c $(CFLAGS) $< -o $@
bar.o: bar.c
        $(CC) -c $(CFLAGS) $< -o $@

因此,简而言之,为目标列表中的每个目标应用模式并为结果创建静态规则。