-
变量介绍
- makefile 中支持程序设计语言中变量的概念
- makefile 中的变量只代表文本数据(即只有一种类型:字符串)
- makefile 中的变量名规则
- 变量名可以包含字符,数字,下划线
- 不能包含
":"
,"#"
,"="
," "
- 变量名大小写敏感
-
变量的定义和使用
##变量定义 CC := gcc TARGET := hello.out ##变量使用 $(TARGET) : func.o main.o $(CC) -o $(TARGET) func.o main.o
-
makefile 中变量的赋值方式
-
简单赋值(
:=
)- 程序设计语言在通用的赋值方式
- 只针对当前语句的变量有效
x := foo y := $(x)b x := new .PHONY : test test : @echo "x => $(x)" @echo "y => $(y)" ##执行结果 x => new y => foob
-
递归赋值(
=
)- 赋值操作可能影响多个其他变量
- 所有与目标变量相关的其它变量都将受到影响
#code1 x = foo y = $(x)b x = new .PHONY : test test : @echo "x => $(x)" @echo "y => $(y)" #执行结果 x => new y => newb #code2 a = $(b) #b还没有被定义,所以a的值为空 b = $(c) #c还没有被定义,所以b的值为空 c = hello-makefile .PHONY : test test : @echo "a => $(a)" @echo "b => $(b)" @echo "c => $(c)" ##执行结果 a => hello-makefile b => hello-makefile c => hello-makefile
-
条件赋值(
?=
)- 如果变量未定义,使用赋值符号中的值定义变量
- 如果变量已经定义,赋值无效
x := foo y := $(x)b x ?= new .PHONY : test test : @echo "x => $(x)" @echo "y => $(y)" ##执行结果 x => foo y => foob
-
追加赋值(
+=
)- 原变量值之后加上一个新值(相当于字符串的追加)
- 原变量值与新值之间由空格隔开
x := foo y := $(x)b x += $(y) .PHONY : test test : @echo "x => $(x)" @echo "y => $(y)" ##执行结果 x => foo foob y => foob
-