【Makefile由浅入深完全学习记录5】预定义变量的使用
发布日期:2021-07-01 00:04:36
浏览次数:2
分类:技术文章
本文共 2315 字,大约阅读时间需要 7 分钟。
今天学习Makefile预定义变量的使用,加qq:1126137994.微信:liu1126137994一起学习更多技术!!!
1.预定义变量:自动变量
在Makefile中存在一些预定义过的变量,我们可以直接拿来使用而不用自己再定义
- 自动变量
$@ , $^ , $<
- 特殊变量
$(MAKE) , $(MAKECMDGOALS) , $(MAKEFILE_LIST) , $(MAKE_VERSION) , $(CURDIR) , $(.VARIABLES) ...
我们先来看看特殊变量的意义:
-$@ *代表当前规则中,触发命令后,会被执行的目标-$^
*代表当前规则中的所有的依赖-$<
*代表当前规则中的第一个依赖自动变量的使用示例如下所示:
all : first second third @echo "\$$@ => $@" @echo "$$^ => $^" @echo "$$< => $<"
注意:
1. "$"对于Makefile来讲具有特殊含义,所以输出时,要加一个"$"进行转义 2. "$@"队友Bash shell 具有特殊意义,所以输出时需要加上"\"进行转义
下面给出一个例子来理解上述的概念:
.PHONY : all first second third all : first second third @echo "\$$@ => $@" @echo "$$^ => $^" @echo "$$< => $<" firtst:second:third:
输入make运行后,显示:
下面我们将第四课的Makefile修改一下,使用自动变量让内容更简洁(点击查看第四课的博客:)
CC := g++TARGET := hello-world.out$(TARGET) : func.o main.o $(CC) -o $(TARGET) func.o main.ofunc.o : func.c $(CC) -o func.o -c func.cmain.o : main.c $(CC) -o main.o -c main.c.PHONY : rebuild clean allrebuild : clean allall : $(TARGET)clean : rm *.o $(TARGET)
将上述Makefile修改为以下的内容:
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 allrebuild : clean allall : $(TARGET)clean : $(RM) *.o $(TARGET)
可以看出,使用自动变量后,Makefile的内容变得更简洁!!!
2.预定义变量:特殊变量
一些特殊变量的意义:
- $(MAKE) 当前make解释器的文件名
- $(MAKECMDGOALS) 命令行中指定的目标名(make的命令行参数)
- $(MAKEFILE_LIST) make所需要处理的makefile文件列表,当前makefile的文件名总是处于列表最后,文件名之间以空格分离
看下面的例子来更加深刻的理解上述三个变量的意义:
.PHONY : all out first second third testall 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 test:
输入:make all : 输入:make first :一些特殊变量的意义:
- $(MAKE_VERSION) 代表当前make解释器的版本
- $(CURDIR) 代表当前make解释器的工作目录
- $(.VARIABLES) 所有已经定义了的变量名列表(预定义和自定义的变量都包括在内)
看下面一个例子来理解一下上面三个特殊变量的意义与使用方法:
.PHONY : test1 test2TDelphi := Delphi TangD.T.Software := D.T. test1 : @echo "$(MAKE_VERSION)" @echo "$(CURDIR)" @echo "$(.VARIABLES)" test2 : @echo "$(RM)"
输入make运行结果为:
从上面运行结果可以看出我的make的版本是:3.81 make解释器的目录为:/home/delphi 而且可以在变量名列表中找到我们定义的变量D.T.Software 与 TDelphi3.总结
- makefile中提供了预定义变量供开发者使用
- 预定义变量的使用能够使开发变得更加高效
- 自动变量是makefile中最常见的变量
- 使用$(.VARIABLES)能够获取所有的特殊变量
想一起探讨以及获得各种学习资源加我:
qq:1126137994 微信:liu1126137994 可以共同交流关于嵌入式,操作系统,C++语言,C语言,数据结构等技术问题。转载地址:https://lyy-0217.blog.csdn.net/article/details/79522230 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
逛到本站,mark一下
[***.202.152.39]2024年04月25日 06时05分38秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
攻防世界web进阶区ics-04详解
2019-04-30
sql注入总结学习
2019-04-30
Python 之 histogram直方图
2019-04-30
Python实现决策树 Desision Tree & 可视化
2019-04-30
决策树 Decision tree
2019-04-30
MATLAB与CUDA
2019-04-30
Linux png转jpg (convert命令)
2019-04-30
Ubuntu更新后终端中字体的颜色全是白色
2019-04-30
vscode git
2019-04-30
基于MATLAB的二进制数字调制与解调信号的仿真——2PSK
2019-04-30
基于MATLAB的模拟调制信号与解调的仿真——DSB
2019-04-30
HDU - 1166 敌兵布阵 (树状数组模板题/线段树模板题)
2019-04-30
CodeForces - 456C Boredom (dp)
2019-04-30
CodeForces - 675A Infinite Sequence(简单数论 细节)
2019-04-30
CodeForces - 1042B Vitamins (思维)
2019-04-30
ACM 2013 长沙区域赛 Collision (几何)
2019-04-30
ACM 2014 鞍山区域赛 E - Hatsune Miku (dp)
2019-04-30
反向传播&梯度下降 的直观理解程序(numpy)
2019-04-30