变量和不同的赋值方式
1、类比C语言变量定义
- makefile中支持程序设计语言中变量的概念
- makefile中的变量只代表文本数据(字符串)
- makefile中的变量名规则
- 变量名可以包含字符,数字,下划线
- 不能包含":","#","=“或” "
- 变量名大小写敏感
2、变量的定义和使用
3、编程实验
CC := gcc
TARGET := hello.out
$(TARGET) : fun.o main.o
$(CC) -o $(TARGET) fun.o main.o
fun.o : fun.c
$(CC) -o fun.o -c fun.c
main.o : main.c
$(CC) -o main.o -c main.c
.PHONY : rebuild clean all
rebuild : clean all
all : $(TARGET)
clean :
rm *.o $(TARGET)
4、makefile中变量的赋值方式
- 简单赋值(:=)
- 递归赋值(=)
- 条件赋值(?=)
- 追加赋值(+=)
1)简单赋值(:=)
- 程序设计语言中的通用的赋值方式
- 只针对当前语句的变量有效
2)、递归赋值(=)
- 赋值操作可能影响多个其他变量
- 所有与目标变量相关的其他变量都将受到影响
3)、条件赋值(?=)
- 如果变量未定义,使用赋值符号中的值定义变量
- 如果变量已经定义,赋值无效
4)、追加赋值(+=)
- 原变量值之后加上一个新值
- 原变量值与新值之间由空格隔开
5、编程实验
#ex1
#x := foo
#y := $(x)b
#x := new
#ex2
#x = foo
#y = $(x)b
#x = new
#a = $(b)
#b = $(c)
#c = hello-makefile
#ex3
#x := foo
#y := $(x)b
#x ?= new
#ex4
x := foo
y := $(x)b
x += new
.PHONY : test
test :
@echo "x => $(x)"
@echo "y => $(y)"
@echo "a => $(a)"
@echo "b => $(b)"
@echo "c => $(c)"
6、小结
- makefile中支持变量的定义和使用
- makefile中存在四种变量的赋值方式
- 简单赋值(:=)
- 递归赋值(=)
- 条件赋值(?=)
- 追加赋值(+=)