第5课 - 预定义变量的使用

1. makefile中的预定义变量

(1)自动变量

  •  $@, @^,  @<    

(2)特殊变量

  • $(MAKE),  $(MAKECMDGOALS) ,  $(MAKEFILE_LIST) 

  • $(MAKEVERSION),  $(MAKEVERSION),  $(CURDIR) ,  $(.VARIABLES) 

  • ......

 

2. 自动变量的使用

(1)自动变量的意义

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

      $^  当前规则所有的依赖

      $<  当前规则中的第一个依赖

(2)自动变量使用示例

.PHONY : all first second third 

all : first second third
    @echo "\$$@ => $@"
    @echo "$$^ => $^"
    @echo "$$< => $<"
    
firtst:
second:
third:

执行 make all 后程序的输出:

$@ => all

$^ => first second third

$< => first

 

注意:

ⅰ. 在执行makefile脚本时,make首先展开脚本中的变量等,相当于C中预处理过程然后再将相应规则中的命令交给shell执行

ⅱ. "$对于makefile有特殊含义输出时需要加上一个 "$" 进行转义

ⅲ. "$@对于Bash Shell 有特殊含义输出时需要加上 "\" 进行转义 $@是shell输入的参数的个数

 

编程实验:

# 演示自动变量的使用


CC := g++
TARGET := hello-world.out

$(TARGET) : func.o main.o
    $(CC) -o $@ $^

func.o : func.c
    $(CC) -o $@ -c $^

main.o : main.c
    $(CC) -o $@ -c $^

.PHONY : rebuild clean all

rebuild : clean all


all : $(TARGET)

clean :
    $(RM) *.o $(TARGET)

 

运行结果:

  

 

 

3. 特殊变量的使用 

(1)$(MAKE),当前make解释器的文件名

(2)$(MAKECMDGOALS),命令行中指定的目标名(make的命令行参数 make xx , xx 即MAKECMDGOALS)

(3)$(MAKEFILE_LIST)

    • make所需要处理的 makefile 文件列表

    • 当前 makefile文件名总是位于列表的最后

    • 文件名之间以空格进行分隔

 

编程实验:

# 测试以上三个特殊变量的含义


.PHONY : all out first second third test

all out : 
    @echo "$(MAKE)"
    @echo "$(MAKECMDGOALS)"
    @echo "$(MAKEFILE_LIST)"
    
    
first :
    @echo "first"
    
second :
    @echo "second"
    
third :
    @echo "third"
    
test :
    @$(MAKE) first
    @$(MAKE) second
    @$(MAKE) third

 

运行结果:

  

 

 

(4)$(MAKE_VERSION),当前make解释器的版本

(5)$(CURDIR),当前make解释器的工作目录

(6)$(.VARIABLES),所有已经定义的变量名列表自定义变量 + 预定义变量自动变量、特殊变量))

 

 编程实验:

 # 测试以上三个特殊变量的含义


.PHONY : test1 test2

TDelphi := Delphi Tang
D.T.Software := D.T.
	
test1 :
	@echo "$(MAKE_VERSION)"
	@echo "$(CURDIR)"
	@echo "$(.VARIABLES)"
	
test2 :
	@echo "$(RM)"

 

 运行结果:

   

 

4. 小结

(1)makefile提供了预定义变量自动变量供开发者使用

(2)预定义变量的使用能否使得makefile的开发更高效

(3)自动变量是makefile中最常见的元素

(4)使用$(.VARIABLES)能否获取所有的特殊变量

 

posted @ 2018-07-04 22:23  梦心之魂  阅读(314)  评论(0编辑  收藏  举报