makefile-变量的基础

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

前言   

    前面我们说了makefile的作用,以及构成。它有着自己的规则,可以说makefile就是一门脚本语言,抛开这么细的分类,它的本质还是一门程序设计语言,那么肯定会有程序设计语言中的各个元素或者元素的影子,这篇文章要将的就是程序设计中最基础的知识—变量。

引申

    我是从C语言学习的,在我的印象中定义变量就是:type varName[= val],使用一个变量前必须要定义,引用未定义的变量就是error。

    接下来我们对比学习。首先定义的时候后,我们不在需要类型,原因是在makefile中没有那么多类型,只有一种,就是字符串的文本类型,所以我们不用通过类型去区分。其次makefile引入了一个概念就是赋值方式,不同的赋值方式对变量的作用有很大的不同。最后说明一点就是在makefile中未定义的变量是空字符串,所以我们可以引用未定义的字符串。

变量的定义

v1 := var1

exp1 :
	@echo "v1 is $(v1)"
	@echo "v2 is $(v2)"	#引用未定义的变量  
make exp1
v1 is var1
v2 is

变量名字 赋值方式 初始值,这就是在makefile中定义变量的方式,引用变量的方式比较特别,习惯就好,都是一些语法。

变量的赋值方式

#简单赋值
v3 := var3

#递归赋值
v4 = var4
v5 = $(v4)
v4 = new var4

#条件赋值
v3 ?= new var3
v6 ?= var6

#追加赋值
v7 := Hello
v8 := $(v7)Makefile
v7 += Makefile

exp2 :
	@echo "v3 is $(v3)"
	
	@echo "v4 is $(v4)"
	@echo "v5 is $(v5)"

	@echo "v3 is $(v3)"
	@echo "v6 is $(v6)"

	@echo "v7 is $(v7)"
	@echo "v8 is $(v8)"
$ make exp2
v3 is var3
v4 is new var4
v5 is new var4
v3 is var3
v6 is var6
v7 is Hello Makefile
v8 is HelloMakefile

    赋值方式分为四种:简单赋值,递归赋值,条件赋值,追加赋值。

    简单赋值:赋值的操作只针对当前赋值语句中的变量有效。

    递归赋值:赋值操作可能影响许多变量的值,只要跟目标变量相关的变量都会被改变。

    条件赋值:如果变量已经被定义,则此处无效。否则变量的值就是我们指定的初始值。

    追加赋值:就是字符串的拼接,需要注意的是,拼接后的空格。

    四种赋值方式结合上面给出的例子和总结可以比较好的理解。这里再多说一点关于递归赋值的认识,我们可以这么去理解,如果一个变量是递归赋值方式的,那么这个变量的值是makefile中这个变量最后一次被赋值后的那个值。而且在makefile中,只要变量存在,我们就可以在任何位置引用这个变量的值,不分前后。

exp1 :
	@echo "v1 is $(v1)"
	@echo "v2 is $(v2)"	#引用为定义的变量

v1 := var1
$ make exp1
v1 is var1
v2 is

猜你喜欢

转载自blog.csdn.net/king_qg/article/details/81058987