关键词: makefile中预定义的变量、自动变量的含义、特殊变量的含义
1. makefile中预定义的变量
-
自动变量:
$@, $^, $<...... -
特殊变量:
$(MAKE), $(MAKECMDGOALS), $(MAKEFILE_LIST)......
2. 自动变量的含义
-
$@
: 当前规则中触发命令被执行的目标 -
$^
:当潜规则中的所有依赖 -
$<
:当前规则中的第一个依赖
3. 自动变量的使用示例
注意:
1)$
对于makefile由特殊的含义,输出时需要加上一个$
进行转义
2) $@
对Bash Shell有特殊含义,输出时需要加上\
进行转义
编程说明5_1:自动变量的使用示例
.PHONY : all first second third
all :cd first second third
@echo "\$$@ => $@"
@echo "$$^ => $^"
@echo "$$< => $<"
first:
second:
third:
输出结果:
delphi@delphi-vm:~/code/ch1_make/5/5_1$ make all
$@ => all
$^ => first second third
$< => first
编程说明5_2:自动变量在工程中的应用
TARGET := hello.out
CC := gcc
## 将目标名和依赖用自动变量替换
$(TARGET) : func.o main.o
$(CC) -o $@ $^
func.o : func.c
$(CC) -o $@ -c $^
main.o : main.c
$(CC) -o $@ -c $^
.PHONY : clean rebuild all
rebuild : clean all
all : $(TARGET)
clean :
rm *.o $(TARGET)
4. 特殊变量的含义
-
$(MAKE)
:当前make解释器的文件名 -
$(MAKECMDGOALS)
:命令行中指定的目标名(make的命令行参数) -
$(MAKEFILE_LIST)
:make所需要处理的makefile文件列表,当前makefile的文件名总是位于列表的最后,文件名之间以空格进行分隔 -
$(MAKE_VERSION)
:当前make解释器的版本 -
$(CURDIR)
:当前make解释器的工作目录 -
$(.VARIABLES)
:所有已经定义的变量名列表(预定义变量和自定义变量)
编程说明5_3:特殊变量的使用示例1
.PHONY : all out first second third
all out :
@echo "\$$(MAKE) = > $(MAKE)"
@echo "\$$(MAKECMDGOALS) => $(MAKECMDGOALS)"
@echo "\$$(MAKEFILE_LIST) => $(MAKEFILE_LIST)"
输出结果:
delphi@delphi-vm:~/code/ch1_make/5/5_3$ make
$(MAKE) = > make
$(MAKECMDGOALS) =>
$(MAKEFILE_LIST) => makefile
delphi@delphi-vm:~/code/ch1_make/5/5_3$ make all
$(MAKE) = > make
$(MAKECMDGOALS) => all
$(MAKEFILE_LIST) => makefile
delphi@delphi-vm:~/code/ch1_make/5/5_3$ make all out
$(MAKE) = > make
$(MAKECMDGOALS) => all out
$(MAKEFILE_LIST) => makefile
$(MAKE) = > make
$(MAKECMDGOALS) => all out
$(MAKEFILE_LIST) => makefile
编程说明5_3:特殊变量的使用示例2
.PHONY : test first second third
first :
@echo "first"
second :
@echo "second"
third :
@echo "third"
test :
$(MAKE) first
$(MAKE) second
$(MAKE) third
输出结果:
delphi@delphi-vm:~/code/ch1_make/5/5_3$ make test
make first
make[1]: 正在进入目录 `/home/delphi/code/ch1_make/5/5_3'
first
make[1]:正在离开目录 `/home/delphi/code/ch1_make/5/5_3'
make second
make[1]: 正在进入目录 `/home/delphi/code/ch1_make/5/5_3'
second
make[1]:正在离开目录 `/home/delphi/code/ch1_make/5/5_3'
make third
make[1]: 正在进入目录 `/home/delphi/code/ch1_make/5/5_3'
third
make[1]:正在离开目录 `/home/delphi/code/ch1_make/5/5_3'
5. 小结
- makefile提供了预定义变量供开发者使用
- 预定义变量的使用能够使得makefile的开发更高效
- 自动变量是makefile中最常见的元素
- 使用
$(.VARIABLES)
能够获取所有的特殊变量
声明:此文章为本人在学习狄泰软件学院《十二月提升计划》所做的笔记,参考书籍《专业嵌入式软件开发》——李云,文章中包含狄泰软件资料内容和《专业嵌入式软件开发》资料内容,一切版权归狄泰软件和《专业嵌入式软件开发》所有!