5.预定义变量的使用
在makefile中存在一些预定义的变量
-自动变量
1 $@,¥^,$<
-特殊变量
1 $(MAKE)..........
自动变量的意义
-¥@
当前规则中触发命令被执行的目标
-$^
当前规则中的所有依赖
-$<
当前规则中的第一个依赖
自动变量的使用示例
1 all:first second third 2 @echo "\$$@ => $@" 3 @echo "$$^ => $^" 4 @echo "$$< => $<"
执行make all:
注意:
1.“$”对于makefile有特殊含义
输出时需要加上一个"$"进行转义
2."$@"对于Bash Shell有特殊含义
输出时需要加上"\"进行转义
请测试下面结果:
makefile1:
1 .PHONY:all first second third 2 all:first second third 3 @echo "\$$@ => $@" 4 @echo "$$^ => $^" 5 @echo "$$< => $<" 6 7 8 first: 9 second: 10 third:
makefile2:
1 CC := g++ 2 TARGET := hello-world.out 3 4 $(TARGET) :func.o main.o 5 $(CC) -o $@ $^ 6 7 func.o:func.c 8 $(CC) -o $@ -c $^ 9 10 main.o:main.c 11 $(CC) -o $@ -c $^ 12 13 .PHONY : rebuild clean all 14 15 rebuild:clean all 16 17 all:$(TARGET) 18 19 clean: 20 21 rm *.o $(TARGET)
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
一些特殊变量的含义:
$(MAKE)
当前make解释器的文件名
$(MAKECMDGOALS)
命令行中指定的目标名(make的命令行参数)
$(MAKEFILE_LIST)
make所需要处理的makefile文件列表
当前makefile的文件名总是位于列表的最后
文件名之间以空格进行分割
1 .PHONY :all out first second third 2 3 all out : first second third 4 @echo "$(MAKE)" 5 @echo "$(MAKECMDGOALS)" 6 @echo "$(MAKEFILE_LIST)"
嵌套测试:
1 .PHONY :all out first second third 2 3 all out : first second third 4 @echo "$(MAKE)" 5 @echo "$(MAKECMDGOALS)" 6 @echo "$(MAKEFILE_LIST)" 7 8 9 first: 10 @echo "first" 11 12 second: 13 @echo "second" 14 15 third: 16 @echo "third" 17 18 test: 19 $(MAKE) first 20 $(MAKE) second 21 $(MAKE) third
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
一些特殊变量的含义
$(MAKE_VERSION)
当前make解释器的版本
$(CURDIR)
当前make解释器的工作目录
$(.VARIABLES)
所有已经定义的变量名列表(预定义变量和自定义变量)
1 .PHONY:test1 test2 2 3 TDelphi := Delphi Tang 4 D.T.Software :=D.T. 5 6 test1: 7 @echo "$(MAKE_VERSION)" 8 @echo "$(CURDIR)" 9 @echo "$(.VARIABLES)"
$(RM)
GNU官网make解释器文档:
www.gnu.org/software/make/manual/make.html