5.预定义变量的使用

在makefile中存在一些预定义的变量

-自动变量

1 $@,¥^,$<
View Code

 

-特殊变量

1 $(MAKE)..........
View Code

 

 

自动变量的意义

-¥@

当前规则中触发命令被执行的目标

-$^

当前规则中的所有依赖

-$<

当前规则中的第一个依赖

 

自动变量的使用示例

1 all:first second third
2   @echo "\$$@  =>  $@"
3   @echo "$$^  =>  $^"
4   @echo "$$<  =>  $<"
View Code

 

 执行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:
View Code

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)    
View Code

 

-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

一些特殊变量的含义:

$(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)"
View Code

 

嵌套测试:

 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
View Code

------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

一些特殊变量的含义

$(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)"
View Code

$(RM)

GNU官网make解释器文档:
www.gnu.org/software/make/manual/make.html

posted @ 2020-04-07 10:43  白驼山庄庄主  阅读(173)  评论(0编辑  收藏  举报