四、UNIX-LINUX---Makefile笔记二-使用变量(3-4)

使用变量

三、变量高级用法

  • 第一种 :变量值的替换
# 把变量“var” 中所有以“a”字符串“结尾”的“a”替换成“b”字符串
	$(var:a = b)
	或
	${var:a = b}
  • 例子
	foo := a.o b.o 
	bar := $(foo:.o = .c)
	#现在bar = a.b b.c
	或者
	foo := a.o b.o 
	bar := $(foo:%.o = %.c) #这种比较好用
  • 第二种:把变量的值在当成变量
	x = y
	y = z
	z = u
	a := $($($(x)))
  • 例子
	x = $(y)
	y = z
	z = HELLO
	a := $($(x))  # $($(x))
	#1.  $(x)=$(y)
	#2,  $(z)
	#3.  HELLO
  • 复杂的例子
	x = variable1
	variable2 := HELLO
	y = $(subst 1,2,$(x))
	z = y
	a := $($($(z)))	# = $($(y))
					# = $($(subst 1,2,$(x)))
					# = $($(subst 1,2,variable1)
					# subst函数令variable1的1换成2
					# = $(variable2)
					# = HELLO
  • 使用多个变量来组成一个变量的名字,然后再取其值
	first_second = HELLO
	a = first
	b = second
	all = $($a_$b)  # $(first_second)
	# all 输出为 HELLO
  • 3.第一种和第二种方法结合
	a_objects := a.o b.o c.o
	1_objects := 1.o 2.o 3.o
	
	sources := $($(a1)_objects:.o = .c)
	# a1=a ,则 sources := a.c b.c c.c
	# a1=1 ,则 sources := 1.c 2.c 3.c
  • 上面的例子结和“函数”和“条件语句”一起使用
	ifdef do_sort	#若定义了do_sort,则foo:=$(sort a d b g q c)
	func := sort	# $(foo) 的值为 a b c d g q
	else			#若没定义do_sort,则foo:=$(sort a d b g q c)
	func := strip	#调用的就是strip函数
	endif
	bar := a d b g q c
	foo := $($(func)$(bar))
  • 把变量的值再当成变量,同样可以用在操作符的左边
	# 定义了三个变量:dir ,foo_sources, foo_print
	dir = foo
	$(dir)_sources := $(wildcard $(dir)/*.c)
	define $(dir)_print
	Ipr $($(dir)_sources)
	endif

四、追加变量值

  • 使用“ += ” 追加符
  • 为了防止“=”带来的变量的递补归定义,make会自动修补
	# 最好使用“:=,而不是“=”
	# " += "表示如果变量之前没有定义过,那么“+=”会自动变成“:=”或“=”
	# 如果有定义过就会继承前次操作符的赋值符
	objects := main.o.foo.o bar.o utils.o
	objects += another.o
	等价于
	objects := $(objects) another.o

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值