4、静态模式¶
静态模式更容易定义多目标规则,让规则定义变得更有弹性,更灵活
<targets ...>: <target-pattern>: <prereq-patterns ...>
<commands>
targets 定义了一系列的目标文件,target-parrtern 是指明了 targets 的模式,prereq-parrterns 是目标的依赖模式,它对 target-parrtern 形成的模式再进行一次依赖 目标的定义。
基于上一个例子修改如下:
# ------------------------
# Generic Makefile
# ------------------------
# Project name
Target = target
# Compile command and flag
CC = gcc -c
CFLAG =
# Linker command and flag
LINKER = gcc -o
LFLAG =
# Sources file
SOURCES := $(wildcard *.c)
OBJECTS := $(SOURCES:%.c=%.o)
$(Target) : $(OBJECTS)
$(LINKER) $@ $(LFLAG) $(OBJECTS)
@echo "Linking complete!"
$(OBJECTS) : %.o : %.c
$(CC) $(CFLAG) $<
@echo "Compilation complete!"
PHONY: clean
clean :
rm -rf $(Target) $(OBJECTS)
@echo "Cleanup complete!"
注解
OBJECTS是指的 main.o、prog1.o ,目标规则 %.o ,取以.o 结尾的目标,这里是 main.o、prog1.o ,依赖规则 %c 取目标规则的 %,加上 .c 结尾,即 main.c、prog1.c 。
注解
$< 表示依赖的集合,一个个取出来使用, 这里是 main.c、prog1.c。 $@ 表示目标集合,一个个取出来使用, 这里只有一个 target。
执行结果:
gcc -c prog1.c
Compilation complete!
gcc -c main.c
Compilation complete!
gcc -o target prog1.o main.o
Linking complete!