最近研究u-boot-1.1.6顶层的Makefile时,对其中的$(@:_config=)不甚理解,在网上搜了关于这句话的诠释,不是很满意,相信很多学习ARM开发的童靴也很是迷惑,现在把我对这句话的理解写出,仅供参考,如有不妥之处,敬请指正。
格式为$(var:str1=str2)或者${var:str1=str2}是指,将变量var中的所有以str1结尾的字符用str2替换。str1必须是结尾字符(若var中有多个变量构成,且变量之间用空格连接,空格前的变量若也是str1结尾也符合条件)。举个例子var:=file1.c file2.c file3.c, 则$(var:.c=.o)的值为file1.o file2.o file3.o.
$(var:str1=str2)和$(patsubst str1,str2,$(var))具有异曲同工之妙,不过后者的功能貌似更强大,使用较多。
$(@:_config=)就可这样理解:
@指我们想要的目标例如smdk2410_config
$(@:_config=)将smdk2410_config中的_config 用空字符代替,仔细理解此处的=号!
运行 smdk2410_config :
@echo $(@:_config=) arm arm920t smdk2410 NULL s3c24x0
的结果为: