1.使用指定字符串替换变量中的后缀字符(串)
格式:$(var:a=b)或${var:a=b}
注意:替换表达式中不能有空格】
例:
src := acc bcc ccc obj := $(src:cc=o) test: @echo "obj => $(obj)"
make test输出结果:
ao bo co
2.变量的模式替换
使用%保留变量值中的指定字符串,替换替他字符
格式:$(var:a%b=x%y)或${var:a%b=x%y}
注意:替换表达式中不能有空格
例:
src := a123b.c a234b.c ajkhb.c obj := $(src:a%b.c=x%y) test: @echo "obj => $(obj)"
分析:原串 a123b.c按照a%b.c进行模式匹配的时候a与b.c中间的123就会被%匹配到,后边就会被保留下来,a和b.c就会被x和y取代。其他的类似。
make test执行结果:
x123y x234y xjkhy
3.规则中的模式替换
targets:target-pattern:prereq-pattern
command1
command2
意义:通过target-pattern从targets中匹配子目标,再通过prereq-pattern从子目标生成依赖,进而构成完整规则。
例:
objs := func.o main.o $(objs): %.o : %.c gcc -o $@ -c $^
分析:
上述第二行,通过%.o匹配objs中的func.o,通过func.c生成依赖,再匹配main.o生成main.c依赖。
上述第二行会被make程序解析成
func.o: func.c gcc -o $@ -c $^ main.o: main.c gcc -o $@ -c $^