第四课:变量和不同的赋值方式

变量和不同的赋值方式


makefile支持程序设计语言中变量的概念。但makefile里面的变量代表文本数据(即字符串)。makefile中的变量命名规则和C语言中相似。

  • 变量名可以包含字符、数字、下划线。

  • 不能包含":"、"#"、"=“或” "。

  • 变量名大小写敏感。

变量的定义和使用:
CC := gcc								# 变量定义
TARGET := hello.out						# 变量定义

$(TARGET) : func.o main.o				# $(var) 变量使用
	$(CC) -o $(TARGET) func.o main.o	#  变量使用

具体释义:CC变量赋值为gcc字符串,TARGET变量被赋值为hello.out字符串,变量的使用需要使用 ( 变 量 名 称 ) 的 形 式 来 引 用 变 量 。 上 图 的 规 则 中 目 标 为 (变量名称)的形式来引用变量。上图的规则中目标为 ()(CC)就代表gcc字符串。类似于C语言中的宏定义。

编程实验:变量定义和使用
CC := gcc
TARGET := hello.out

$(TARGET) : main.o func.o
	$(CC) -o $(TARGET) main.o func.o

main.o: main.c
	$(CC) -o main.o -c main.c
func.o: func.c
	$(CC) -o func.o -c func.c

.PHONY : rebuild clean all

rebuild : clean all
all : $(TARGET)
clean : 
	rm *.o $(TARGET)

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

makefile中变量的赋值方式:
  • 简单赋值( := )

  • 递归赋值( = )

  • 条件赋值( ?= )

  • 追加赋值( += )

1.简单赋值( := )

  • 程序设计语言中的通用赋值方式

  • 只针对当前语句的变量有效

    x := foo
    y := $(x)b
    x := new
    
    .PHONY : test
    test :
    	@echo "x => $(x)"		# x => new
    	@echo "y => $(y)"		# y => foob
    

2.递归赋值( = )

  • 赋值操作可能影响多个其它变量

  • 所有与目标变量相关的其他变量都将受到影响

    x = foo
    y = $(x)b
    x = new
    
    .PHONY : test
    test :
    	@echo "x => $(x)"		# x => new
    	@echo "y => $(y)"		# y => newb
    

3.条件赋值( ?= )

  • 如果变量未定义,使用赋值符号中的值定义变量

  • 如果变量已定义,赋值无效

    x := foo
    y := $(x)b
    x ?= new
    
    .PHONY : test
    test :
    	@echo "x => $(x)"		# x => foo
    	@echo "y => $(y)"		# y => foob
    

    4.追加赋值( += )

  • 原变量值之后加上一个新值

  • 原变量值与新值之间由空格隔开

    x = foo
    y = $(x)b
    x += $(y)
    
    .PHONY : test
    test :
    	@echo "x => $(x)"		# x => foo foob
    	@echo "y => $(y)"		# y => foob
    

    注意: makefile中的变量无须定义就可以直接引用,只不过此时引用变量的值为空。

编程实验:不同的赋值方式

1.简单赋值
实验截图:
在这里插入图片描述2.递归赋值
实验截图:
在这里插入图片描述3.条件赋值
实验截图:
在这里插入图片描述
4.追加赋值
实验截图:
在这里插入图片描述

参考资料:

狄泰软件教学课件

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

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值