赋值符号:
简单赋值(:=):只对当前语句有效,赋值改变的值不会传递
递归赋值(=):一个地方值改变,所有与这个变量相关的值都会变
条件赋值(?=):变量未定义,赋值有效,变量没有定义,赋值无效。
追加赋值(+=):在原变量后面加上一个新的值,用空格隔开
注意:makefile变量的值都属于文本数据,makefile里面用$(变量)来表示变量的值
代码实例:
# ex1
# x := foo
# y := $(x)b //$(x)表示变量的值
# x := new //运行之后的 y = foob ; x = new
# ex2
# x = foo
# y = $(x)b
# x = new //运行之后的 y = newb ; x = new
# ex3
# x := foo
# y := $(x)b
# x ?= new //?=因为前面已经赋值,所以无效
//运行之后的 y = foob ; x = foo
# ex4
# x := foo
# y := $(x)b
# x += new
//运行之后的 y = foob ; x = foo new
#代码如果需要运行,请去掉前面的#号注释
常用的预定义变量:
自动变量:
$@ : 当前规则中触发命令执行的目标
$^ : 当前规则中的所有依赖
$< : 当前规则中的第一条依赖
特殊变量:
$() : 括号里面大写基本上都是make自带的一些特殊变量,详细的可查make官网帮助文档
代码实例:
.PHONY : all first second third
all : first second third
@echo "\$$@ => $@" #打印all
@echo "$$^ => $^" #打印first second third
@echo "$$< => $<" #打印first
firtst:
second:
third:
--------
.PHONY : all out first second third test
all out :
@echo "$(MAKE)" #打印当前make解释器的文件名
@echo "$(MAKECMDGOALS)" #打印命令行中指定的目标名(make的命令行参数)
@echo "$(MAKEFILE_LIST)" #make所需要处理的makefile文件列表,当前make文件总是处于列表最后,文件名之间以空格分隔
first :
@echo "first"
second :
@echo "second"
third :
@echo "third"
test :
@$(MAKE) first
@$(MAKE) second
@$(MAKE) third
-------
.PHONY : test1 test2
TDelphi := Delphi Tang
D.T.Software := D.T.
test1 :
@echo "$(MAKE_VERSION)" #当前make解释器的版本
@echo "$(CURDIR)" #当前make解释器的工作目录
@echo "$(.VARIABLES)" #所有已定义的变量(预定义变量和自定义变量)
test2 :
@echo "$(RM)"