---- 整理自狄泰软件唐佐林老师课程
1. 预定义变量的分类
在 Makefile 中存在一些预定义的变量,它们大体可以分为两类,一类是自动变量,一类是特殊变量。
- 自动变量:
$@
$^
$<
- 特殊变量:
$(MAKE)
$(MAKECMDGOALS)
$(MAKEFILE_LIST)
$(MAKE_VERSION)
$(CURDIR)
$(.VARIABLES)
1.1 一些自动变量
$@
当前规则中触发命令被执行的目标
$^
当前规则中的所有依赖
$<
当前规则中第一个依赖
.PHONY: all first second third
all: first second third
@echo "\$$@ ==> $@"
@echo "$$^ ==> $^"
@echo "$$< ==> $<"
1.2 一些特殊变量
$(MAKE)
当前 make 解释器的文件名
$(MAKECMDGOALS)
命令行中指定的目标名(make 的命令行参数)
$(MAKEFILE_LIST)
make 所需要处理的 Makefile 文件列表,当前 Makefile 的文件名总是位于列表的最后,文件名之间以空格进行分隔
$(MAKE_VERSION)
当前 make 解释器的版本
$(CURDIR)
当前 make 解释器的工作目录
$(.VARIABLES)
所有已经定义的变量名列表(预定义变量和自定义变量)
.PHONY: all first second third out
all out:
@echo "$(MAKE)"
@echo "$(MAKECMDGOALS)"
@echo "$(MAKEFILE_LIST)"
.PHONY: all first second third
all:
@echo "$(MAKE_VERSION)"
@echo "$(CURDIR)"
@echo "$(.VARIABLES)"
1.3 函数调用
Makefile 中还可以执行函数的调用
.PHONY: all first second third
all:
@echo "$(MAKE_VERSION)"
@echo "$(CURDIR)"
@echo "$(.VARIABLES)"
first:
@echo "first"
second:
@echo "second"
third:
@echo "third"
test:
@$(MAKE) first
@$(MAKE) second
@$(MAKE) third
在实际的大型项目中,Makefile 程序可能由多个 Makefile 文件构成,$(MAKE) first
,$(MAKE) second
,$(MAKE) third
模拟了 Makefile 的调用。