makefile专题:预定义变量的使用

关键词: 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)能够获取所有的特殊变量

声明:此文章为本人在学习狄泰软件学院《十二月提升计划》所做的笔记,参考书籍《专业嵌入式软件开发》——李云,文章中包含狄泰软件资料内容和《专业嵌入式软件开发》资料内容,一切版权归狄泰软件《专业嵌入式软件开发》所有!

你可能感兴趣的:(makefile专题:预定义变量的使用)