makefile学习(五):预定义变量的使用

5.预定义变量的使用

学自<狄泰软件学院>

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

自动变量

  • $@, $^, $<

特殊变量

  • (MAKE) , (MAKECMDFOALS) , (MAKEFILE_LIST)
  • (MAKE_VERSION), (CURDIR) , (.VARIABLES)
  • ….

自动变量

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

当一个规则中有多少个目标。$@ 所指的是其中任何造成规则命令被运行的目标。

  • $^ : 当前规则中的所有依赖
  • $< : 当前规则中的第一个依赖

示例代码:自动变量的使用示例

.PHONY: all frist second third

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

输出结果:
$ make
$@ => test
$^ => second third
$< => second

分析:
**1.“$”对于makefile有特殊含义:**输出时需要加上一个“$”进行转义

**2.“$@”对于Bash Shell有特殊含义:**输出时需要加上“\”进行转义

特殊变量

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

打印当前make解析器的名字:如ubuntu中make解析器文件名为”make”;window命令行中make解析器文件名为”mingw32-make”;

$(MAKECMDGOALS)
  1. 命令行中指定的目标名(make的命令行参数)

在命令行执行make命令后面指定的目标名。如执行make all。
$(MAKECMDGOALS)输出为 ”all” 。如果直接执行make也就是输出为空。

$(MAKEFILE_LIST)
  1. Make所需要处理的makefile文件列表
  2. 当前makefile的文件名总是位于列表的最后
  3. 文件名之间以空格进行分隔
$(MAKE_VERSION)
  1. 当前make解释器的版本
$(CURDIR)
  1. 当前make解释器的工作目录
$(.VARIABLES)

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

在我们阅读或者开发时,我们可以通过这个特殊变量查看本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

.PHONY : test1 test2

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

输出结果:
C:\exercise\makefile>make all
“mingw32-make”
“all”
" makefile"

C:\exercise\makefile>make test
mingw32-make[1]: Entering directory C:/exercise/makefile' "first" mingw32-make[1]: Leaving directoryC:/exercise/makefile’
mingw32-make[1]: Entering directory C:/exercise/makefile' "second" mingw32-make[1]: Leaving directoryC:/exercise/makefile’
mingw32-make[1]: Entering directory C:/exercise/makefile' "third" mingw32-make[1]: Leaving directoryC:/exercise/makefile’

C:\exercise\makefile>make test1
“3.81”
“C:/exercise/makefile”
“<D ?F CommonProgramFiles CARBON_MEM_DISABLE MAKEFLAGS F77FLAGS CWEAVE ?D @D HOMEDRIVE @F ^D CURDIR SHELL RM CO ProgramFiles(x86) PREPROCESS.F LINK.o OUTPUT_OPTION COMPILE.cpp PATHEXT MAKEFILE_LIST FPS_BROWSER_USER_PROFILE_STRING TMP LINK.p CM2015DIR CC SystemDrive CommonProgramFiles(x86) VS100COMNTOOLS CHECKOUT,v CPP SystemRoot LINK.cc PATH LD TEXI2DVI YACC COMPILE.mod include PROCESSOR_ARCHITECTURE LINK.r USERPROFILE LINT COMPILE.f LINT.c ALLUSERSPROFILE ComSpec YACC.y AR NUMBER_OF_PROCESSORS .FEATURES TANGLE ProgramW6432 GET D TDelphi LOCALAPPDATA ARFLAGS WEAVE MAKE_COMMAND LINK.cpp PROCESSOR_ARCHITEW6432 F77 COMPILE.cc .VARIABLES PC *F PROCESSOR_IDENTIFIER OS MSDevDir COMPILE.def LEX HOMEPATH PROMPT MFLAGS *D LEX.l PSModulePath +D windir COMPILE.r +F M2C SUFFIXES APPDATA TEMP MAKEFILES <F CXX COFLAGS COMPILE.C ^F COMPILE.S LINK.F ProgramFiles COMPILE.c SESSIONNAME PROCESSOR_REVISION COMPILE.s MOZ_PLUGIN_PATH MAKELEVEL MAKEINFO XILINX_FOR_ALTIUM_OVERRIDE TEX PROCESSOR_LEVEL FPS_BROWSER_APP_PROFILE_STRING LINK.f USERDOMAIN_ROAMINGPROFILE”

C:\exercise\makefile>make test2
“rm -f”

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值