这是静态规则的makefile代码示例的片段:
objects = foo.o bar.o
all: $(objects)
$(objects): %.o: %.c
$(CC) -c $(CFLAGS) $< -o $@
这意味着什么,例如:
target : %.o : %.c
这是否意味着目标:%.o和%.o:%.c解释目标的所有依赖项将由%.o规则生成,配方将应用于该规则,%.o的所有依赖项将由%.c规则生成,并且配方将应用?
请有人澄清一下:
1.makefile中的静态规则解释语法是什么?
2.配方是否同时适用于%.o和%.c规则?
3.Is 它连接了目标:$(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 $@
这是写作的简写:
foo.o: foo.c
$(CC) -c $(CFLAGS) $< -o $@
bar.o: bar.c
$(CC) -c $(CFLAGS) $< -o $@
因此,简而言之,对于目标列表中的每个目标,应用模式并为结果创建静态规则。