在Makefile中,变量是一个名字,它不仅可以代表一个文本字符串,而且可以用来代表文件名、编译选项、程序运行的选项参数、搜索源文件的目录,以及编译输出的目录。在Makefile的目标、依赖、命令中任意引用变量的地方,在执行make命令后,都会被变量定义的值所取代。
一 Makefile使用变量注意事项:
1.大小写敏感,推荐的方法是对于内部定义的一般变量(例如,目标文件列表objects)使用小写,而对于一些参数列表(例如,编译选项CFLAGS)采用大写。
2.自动化变量,例如:
$@: 所有的参数,每个都用双引号引起,以(“$1” “$2” ...)的形式保存所有输入的命令行参数。
$*: 所有的参数,用一个双引号引起整体,以(“$1 $2 ...”)的形式保存所有输入的命令行参数。
二 变量的引用方式
$(var)或者${var}
三 变量的定义与赋值
Makefile文件在进行变量定义是通常可以采用两种方式,第一种是递归展开定义法,另一种是直接展开定义法。这里介绍使用较多的直接展开定义法。
直接展开定义法
var := variable
demo
var1 := hello
var2 := $(var1) world!
var1 := this is another var1
var3 := $(object)
object := direct var2 define!
all:
@echo $(var1)
@echo $(var2)
@echo $(var3)
@echo $(object)
make之后显示如下:
this is another var1
hello world!
direct var2 define!
解释:
1. makefile命令行@的作用,makefile会自动显示命令行,@表示不显示此命令行。
2.makefile命令行以Tab键开始,如果执行make命令后提升“*** 遗漏分隔符 。 停止。”这个错误,可能就是没有以Tab开始命令行。
替换引用定义
对于一个已经定义的变量,可以使用“替换引用”将其值中的后缀字符(串)使用指定的字符(串)替换。
格式为 $(var:a=b)或者${var:a=b}
例如:
foo := a.o b.o c.o
bar := $(foo:.o=.c)
变量bar的值就为“a.c b.c c.c”