第六课:变量的高级主题(上)

变量的高级主题(上)


变量值的替换
  • 使用指定字符(串)替换变量值中的后缀字符(串)
  • 语法格式:$ (var:a=b)或$ {var:a=b}
    • 替换表达式中不能有任何空格
    • make中支持使用${}对变量进行取值
src := a.cc b.cc c.cc
obj := $(src:cc=o)

test:
	@echo "obj => $(obj)"
规则中的模式替换
targets : target-pattern : prereq-pattern
	command1
	command2
	.....

意义:

  • 通过target-patttern从targets中匹配子目标;再通过prereq-pattern从子目标生成依赖;进而构成完整的规则;

规则中的模式替换示例

OBJS := func.o main.o

$(OBJS) : %.o : %.c
		gcc -o $@ -c $^
#上面等同于下面的语句	
func.o : func.c
	gcc -o $@ -c $^

main.o : main.c
	gcc -o $@ -c $^

编程实验:变量值的替换

src1 := a.cc b.cc c.cc
obj1 := $(src1:cc=o)

test1 :
	@echo "obj1 => $(obj1)"

src2 := a11b.c a22b.c a33b.c
obj2 := $(src2:a%b.c=x%y)

test2:
	@echo "obj2 => $(obj2)"

实验截图:
在这里插入图片描述
在这里插入图片描述


变量值的嵌套引用
  • 一个变量名之中可以包含对其他变量的引用
  • 嵌套引用的本质是使用一个变量表示另外一个变量
x := y
y := z
a := $($(x)) # => a := $(y) => a := z

命令行变量

  • 运行make时,在命令行定义变量
  • 命令行变量默认覆盖makefile中定义的变量
hm := hello makefile

test:	
	@echo "hm => $(hm)" # make hm = cmd 输出 => hm => cmd

override关键字

  • 用于指示makefile中定义的变量不能被覆盖
  • 变量的定义和赋值都需要使用override关键字
override var := test

test:
	@echo "var => $(var)" # 用cmd给var赋值,输出依然时test;
						  # make var = cmd => var => test

define关键字

  • 用于在makefile中定义多行变量
  • 多行变量的定义从变量名开始到endef结束
  • 可使用override关键字防止变量被覆盖
  • define定义的变量等价于使用=定义的变量
# 写法一
define foo
I'm fool!
endef

# 写法二
override defind cmd
	@echo "run cmd ls ...."
	@ls
endef

编程实验:变量的特殊用法

hm := hello makefile

override var := override-test

define foo
I'm fool!
endef

override define cmd
	@echo "run cmd ls ..."
	@ls
endef

test :
	@echo "hm => $(hm)"
	@echo "var => $(var)"
	@echo "foo => $(foo)"
	${cmd}

实验截图:在这里插入图片描述

小结:在这里插入图片描述
参考资料:

狄泰软件教学课件

[1] GNU make
    
文章所示代码链接

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值