预定义变量的使用

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

自动变量

  • $@, $^, $<

特殊变量

  • $(MAKE), $(MAKECMDGOALS), $(MAKEFILE_LIST)
  • $(MAKE_VERSION), $(CURDIR), $(.VARIABLES)
  • 。。。

2 自动变量的意义

$@

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

$^

  • 当前规则中的所有依赖

$<

  • 当前规则中的第一个依赖

自动变量的使用示例

这里写图片描述

注意

  • “$”对于makefile有特殊含义,输出时需要加上一个”$”进行转义
  • “$@”对于Bash Shell有特殊含义,输出时需要加上”\”进行转义

编程实验:自动变量的使用


.PHONY : all first second third 

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

firtst:
second:
third:

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 特殊变量的含义

$(MAKE)

  • 当前make解释器的文件名

$(MAKECMDGOALS)

  • 命令行中指定的目标名(make的命令行参数)

$(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

make all的执行结果:
make
all
 makefile(注意:这个前面有一个空格)

make test的执行结果:
make[1]: Entering directory `/home/aston/comeon'
first
make[1]: Leaving directory `/home/aston/comeon'
make[1]: Entering directory `/home/aston/comeon'
second
make[1]: Leaving directory `/home/aston/comeon'
make[1]: Entering directory `/home/aston/comeon'
third
make[1]: Leaving directory `/home/aston/comeon'

$(MAKE_VERSION)

  • 当前make解释器的版本

$(CURDIR)

  • 当前make解释器的工作目录

$(.VARIABLES)

  • 所有已经定义的变量名列表(预定义变量和自定义变量)

编程实验:预定义变量示例二


.PHONY : test1 test2

TDelphi := Delphi Tang
D.T.Software := D.T.

test1 :
    @echo "$(MAKE_VERSION)"
    @echo "$(CURDIR)"
    @echo "$(.VARIABLES)"

test2 :
    @echo "$(RM)"

make test2的输出结果:
rm -f

注意:@echo “$(.VARIABLES)”,必须用“”引起来,否则会报“/bin/sh: 1: cannot open D: No such file”

4 小结

  • makefile提供了预定义变量供开发者使用
  • 预定义变量的使用能够使得makefile的开发更加高效
  • 自动变量是makefile中最常见的元素
  • 使用$(.VARIABLES)能够获取所有的特殊变量

修改记录


时间动作
2017.7.9首次上传

参考资料


唐老师 — 狄泰软件学院 — 十二月提升计划

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值