makefile 初探之《变量的使用》

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/WZJwzj123456/article/details/85529216

1:概述

在 Makefile 中的定义的变量,就像是 C/C++语言中的宏一样,他代表了一个文本字串,在 Makefile 中执行的时候其会自动原模原样地展开在所使用的地方。其与 C/C++所不同的是,你可以在 Makefile 中改变其值。在 Makefile 中,变量可以使用在“目标”,“依赖目标”,“命令”或是 Makefile 的其它部分中。

变量的命名字可以包含字符、数字,下划线(可以是数字开头),但不应该含有“:”、“#”、“=”或是空字符(空格、回车等)。变量是大小写敏感的,“foo”、“Foo”和“FOO”是三个不同的变量名。

2:基本应用

变量在声明时需要给予初值,而在使用时,需要给在变量名前加上“$”符号,但最好用小括号“()”或是大括号“{}”把变量给包括起来。如果你要使用真实的“$”字符,那么你需要用“$$”来表示。 变量可以使用在许多地方,如规则中的“目标”、“依赖”、“命令”以及新的变量中。

cal : add.o sub.o cal.o
	gcc -o cal add.o sub.o cal.o
add.o : add.c
	gcc -c add.c
sub.o : sub.c
	gcc -c sub.c
cal.o : cal.c
	gcc -c cal.c
clean :
	rm *.o cal

这是上篇中我们编写的Makefile,从中可以看出我们把add.o sub.o cal.o用了两边,如果我们用变量代替的话就会省事很多,下边我们一起来看一下用变量之后的效果

objects = add.o sub.o cal.o
cal : $(objects)
	gcc -o cal $(objects)
add.o : add.c
	gcc -c add.c
sub.o : sub.c
	gcc -c sub.c
cal.o : cal.c
	gcc -c cal.c
clean :
	rm *.o cal

上面我们看出用objects来代替我们的.o列表,这样就方便很多,如果以后要添加什么文件的话,只需要在个变量后边添加就可以了,是不是很方便。变量会在使用它的地方精确地展开,就像 C/C++中的宏一样,上边的变量展开后和之前的是一样。

另一种方式,我们刚才说了,Makefile中的变量和c语言中的宏一样,那我们知道宏是可以引用其他宏定义的,那么变量的定义是否也可以引用其他的变量呢,答案是肯定的,下面我们来看一下什么是变量中的变量,我们用变量来定义一个变量

objects = add.o sub.o cal.o
target = $(objects)
cal : $(target)
	gcc -o cal $(target)
add.o : add.c
	gcc -c add.c
sub.o : sub.c
	gcc -c sub.c
cal.o : cal.c
	gcc -c cal.c
clean :
	rm *.o cal

上面的例子可以看出,我们用objects这个变量去定义target变量,后面我们直接用target变量。另外如果我们另外添加了其他文件的话,我们除了在objects = add.o sub.o cal.o后面直接添加之外,我们还有另外一种方式,objects += xxx.o这种方式是不是和c语言很相似,另外我们还可以用objects := $(objects) xxx.o

另外一种通过define来定义变量                                                                                                                                                define target
add.o sub.o cal.o
endef

define 指示符后面跟的是变量的名字,而重起一行定义变量的值,定义是以 endef 关键字结束。其工作方式和“=”操作符一样。变量的值可以包含函数、命令、文字,或是其它变量。因为命令需要以[Tab]键开头,所以如果你用 define 定义的命令变量中没有以[Tab]键开头,那么 make 就不会把其认为是命令。 

猜你喜欢

转载自blog.csdn.net/WZJwzj123456/article/details/85529216