一、foreach和call
test_var0 = welcome come to Shenzhen!
test_var1 = "* start" $(1) $(2) "end!"
result0 = $(call test_var1, "gzsh0","gzsh1")
result1 = $(foreach i,$(test_var0),$(i)_gzsh)
result2 = $(foreach i,$(test_var0), $(call test_var1,$i,".gzsh"))
all:
@echo "foreach function test."
@echo $(result0)
@echo $(result1)
@echo $(result2)
结果:
foreach function test.
* start gzsh0 gzsh1 end!
welcome_gzsh come_gzsh to_gzsh Shenzhen!_gzsh
* start welcome .gzsh end! * start come .gzsh end! * start to .gzsh end! * start Shenzhen! .gzsh end!
注意:
foreach函数每次循环都会得到一个字符串,这个函数的返回值是所有循环结果得到的字符串的总和。
二、if函数
result = $(if "hello world!", "Makefile if function test.")
all:
@echo $(result)
结果:
Makefile if function test.
if函数的格式
$(if condition, [then part], [else part])
如果condition不为空字符串,执行else part,否则执行else part。else part可以没有。
三、notdir函数
var0 = $(notdir $(abspath $(CURDIR)/))
var1 = $(notdir $(abspath $(CURDIR)/swdefs.mk))
all:
@echo "var0: $(var0)"
@echo "var1: $(var1)"
make结果:
var0: soc
var1: swdefs.mk
soc是当前的工作目录。
notdir是取绝对目录最后一个目录或者文件名字作为返回值。如果这个函数操作的对象是一个目录的路径,不管这个目录名后有没有/,这个函数都是返回这个目录的名字作为返回值。
四、abspath函数
这个函数会将一个路径中含有的连续/只保留一个,并且会将../、./相对路径的部分解释为实际的路径,结果不会再含有相对路径../、./的部分。