1 变量
- makefile中支持程序设计语言中变量的概念
- makefile中的变量只代表文本数据(字符串)
- makefile中的变量命名规则
- 变量名可以包括字符、数字、下划线
- 不能包含”:”, “#”, “=”或“ ”
- 变量名大小写敏感
- 在linux命令行中,可以直接使用$var_name的方式取得变量的值。但是在makefile中,如果变量名的字符数不为1必须使用$(var_name)的方式才能取得变量的值,如果为1采用$var_name的方式也能取得变量的值
变量的定义和使用
编程实验:变量定义和使用
CC := g++
TARGET := hello-world.out
$(TARGET) : func.o main.o
$(CC) -o $(TARGET) func.o main.o
func.o : func.c
$(CC) -o func.o -c func.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)
2 makefile中变量的赋值方式
- 简单赋值(:=)
- 递归赋值(=)
- 条件赋值(?=)
- 追加赋值(+=)
- 不同的赋值方式意义不同
简单赋值(:=)
- 程序设计语言中的通用的赋值方式
- 只针对当前语句的变量有用
递归赋值(=)
- 赋值操作可能影响多个其它变量
- 所有与目标变量相关的其它变量都将受到影响
条件赋值(?=)
- 如果变量未定义,使用赋值符号中的值定义变量
- 如果变量已经定义,赋值无效
追加赋值(+=)
- 原变量值之后加上一个新值
- 原变量值与新值之间由空格隔开
编程实验:不同的赋值方式
# ex1
# x := foo
# y := $(x)b
# x := new
# x ==> new
# y ==> newb
# ex2
# x = foo
# y = $(x)b
# x = new
# x ==> new
# y ==> foob
# a = $(b)
# b = $(c)
# c = hello-makefile
# a ==> hello-makefile
# c ==> hello-makefile
# c ==> hello-makefile
# ex3
# x := foo
# y := $(x)b
# x ?= new
# x ==> foo
# y ==> foob
# ex4
# x := foo
# y := $(x)b
# x += new
# x ==> foo new
# y ==> foob
.PHONY : test
test :
@echo "x => $(x)"
@echo "y => $(y)"
@echo "a => $(a)"
@echo "b => $(b)"
@echo "c => $(c)"
3 小结
- makefile中支持变量的定义和使用
- makefile中存在四种变量的赋值方式
- 简单赋值(:=)
- 递归赋值(=)
- 条件赋值(?=)
- 追加赋值(+=)
修改记录
时间 | 动作 |
---|---|
2017.7.5 | 首次上传 |
参考资料
唐老师 — 狄泰软件学院 — 十二月提升计划