在makefile中,支持程序设计语言中变量的概念,全部的变量只表明文本数据。
ide
1、变量的定义和使用
测试
#变量的定义 CC := gcc TARGET := hello.out #变量的使用 $(TARGET) : func.o main.o $(CC) -o $(TARGET) func.o main.o
2、变量的赋值方式spa
1. 简单赋值 :=操作系统
只针对当前语句的变量有效
命令行
2. 递归赋值 =
设计
赋值操做可能影响多个其余变量,全部与目标变量相关的其余变量都将受到影响
3d
3. 条件赋值 ?=
blog
若是变量未定义,使用赋值符号中的值定义变量,若是已定义,赋值无效递归
4. 追加赋值 +=
作用域
原变量值以后加上一个新值,原变量值和新值之间由空格隔开
3、预约义变量
一、自动变量
$@ 当前规则中触发命令被执行的目标
$^ 当前规则中的全部依赖
$< 当前规则中的第一个依赖
1.1 自动变量的使用
二、特殊变量
这部分根据须要再去查询make手册
4、变量的高级用法
一、变量值的替换
1.1 使用指定字符替换变量值中的后缀字符
1.2 语法格式:$(var:a=b)或${var:a=b}
2. 变量的模式替换
2.1 使用%保留变量值中的指定字符,替换其余字符
2.2 语法格式: $(var:a=b)或${var:a=b}
3. 测试代码
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)"
四、规则中的模式替换
示例以下:
能够当作下面的代码
func.o main.o : %.o : %.c gcc -o $@ -c $^
分别进行匹配事后,就获得了图中的结果
五、变量值的嵌套引用
5.1 一个变量名之中能够包含对其余变量的引用
5.2 嵌套引用的本质是使用一个变量表示另一个变量
六、命令行变量
6.1 运行make时,在命令行定义变量
6.2 命令行变量默认覆盖makefile中定义的变量
7. override关键字
使用override关键字之后,makefile中定义的变量不会由于make的命令行变量而改变
八、define关键字
定义多行变量时,使用define关键字,同时能够配合override关键字防止变量被覆盖,
define定义的变量等价于使用=定义的变量
九、环境变量
环境变量是操做系统自己的变量,makefile能够直接使用这些变量,但若是在makefile中定义了同名变量,那么将在当前的makefile中覆盖环境变量。运行make时。指定-e选项,能够优先使用环境变量
十、变量在不一样makefile之间的传递方式
10.1 直接在外部定义环境变量进行传递
10.2 使用export定义变量进行传递
10.3 定义make命令行变量进行传递
十一、目标变量
做用域只在指定目标及连带规则中
var := D.T.Software new := TDelphi test : var := test-var %e : override new := test-new test : another @echo "test :" @echo "var => $(var)" @echo "new => $(new)" another : @echo "another :" @echo "var => $(var)" @echo "new => $(new)"
运行结果以下:
因为another和test存在依赖关系,所以,定义的局部变量也会对another生效
十二、模式变量
模式变量是目标变量的扩展,能够根据相应的规则,找到符合规则的目标
交流QQ群:199546072