变量的高级主题(下)
环境变量(全局变量)
- makfile中能够直接使用环境变量的值
- 定义了同名变量,环境变量将被覆盖
- 运行make时指定"-e"选项,优先使用环境变量
为什么要在makefile中使用环境变量?
-
优势
- 环境变量可以在所有的makefile中使用
-
劣势
- 过多的依赖于环境变量会导致移植性降低
变量在不同makefile之间的传递方式
- 直接在外部定义环境变量进行传递
- 使用export定义变量进行传递(定义临时环境变量)
- 定义make命令行变量进行传递(推荐)
编程实验:变量的传递
#1.makefile
MAKEFILE_HOME := makefile home
export var := Software
new := T1mzhou
test :
@echo "MAKEFILE_HOME => $(MAKEFILE_HOME)"
@echo "make anohter file. .."
@$(MAKE) -f makefile.2
@$(MAKE) -f makefile.2 new:=$(new)
#makefile.2
test:
@echo "MAKEFILE_HOME => $(MAKEFILE_HOME)"
@echo "var => $(var)"
@echo "new => $(new)"
实验截图:
目标变量(局部变量)
- 作用域只在指定目标及连带规则中
- target: name < assignment> value
- target : override name < assignment> value
var := T1mzhou
test : var := test-var
test:
@echo "test:"
@echo "var => $(var)"
模式变量
- 模式变量时目标变量的拓展
- 作用域只在符合模式的目标及连带规则中
- pattern : name < assignment> value
- pattern: override name < assignment> value
new := T1mzhou
%e : override new := test-new
rule:
@echo "rule:"
@echo "new => $(new)"
#输出 rule:
# new => test-new
编程实验:
var := Software
new := Tmzhou
test : var := T1mzhou
%e : override new := test-new
test : another
@echo "test :"
@echo "var => $(var)"
@echo "new => $(new)"
another :
@echo "another :"
@echo "var => $(var)"
@echo "new => $(new)"
rule :
@echo "rule :"
@echo "var => $(var)"
@echo "new => $(new)"
实验截图:
小结
- 全局变量:makefile外部定义的环境变量
- 文件变量:makefile中定义的变量
- 局部变量:指定目标的变量
参考资料:
狄泰软件教学课件