最新要闻
- 天天百事通!3888元 + 可叠加百亿补贴:天猫无门槛红包12点正式开抢
- 4条狼青犬咬死几十只羊!警惕:性情凶狠、攻击性非常强
- 全球微头条丨211文科硕士吐槽均薪5500引争议:文科生转码或成趋势 还是理科香?
- 报道:“RNG老板道歉”登热搜 CEO:轮换中单是我的决定
- 【世界播资讯】李想:理想汽车要占20万元以上市场35% 将对标苹果特斯拉
- 垂头丧气的丧是什么意思?关于垂头丧气的反义词有哪些?
- 父亲的兄弟如何称呼?写给父亲的一封信作文模板
- 张靓颖的海豚音是哪首歌?张靓颖终于等到你的歌词是什么?
- 李想:如果不卖电池 电动车成本可以比燃油车低
- 热议:马斯克最疯计划曝光!给我10万亿美元:可拯救地球
- 梅西花百万买苹果手机送给阿根廷队友:定制了35部24K金的iPhone 14 Pro
- 天天微头条丨河南小伙1:1打造歼10战斗机模型!司机:这辈子拉过最硬的货
- 每日简讯:奇瑞背刺长城 捷途旅行者实车亮相:10多万的“硬汉”登场
- 早晨问候客户的正能量句子有哪些?早晨问候语有哪些?
- 仓央嘉措是哪个朝代的?仓央嘉措经典诗句有哪些?
- 全球快讯:带有雨的诗句有哪些_带有雨的诗句具体有哪些
手机
iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
- 警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- 男子被关545天申国赔:获赔18万多 驳回精神抚慰金
- 3天内26名本土感染者,辽宁确诊人数已超安徽
- 广西柳州一男子因纠纷杀害三人后自首
- 洱海坠机4名机组人员被批准为烈士 数千干部群众悼念
家电
轻松玩转makefile | 变量与模式
前言
本文通过简单的几个示例,以及对同一个Makefile进行几个版本的迭代,帮助快速的理解变量和模式规则的使用。
1、回顾
在上一篇文章中,我们使用Makefile编译fun.c和main.c这两个文件,最终生成名为app的可执行文件。
(资料图)
fun.c的内容
#include void fun(){printf("This is fun()!\n");}
main.c的内容
extern void fun(); int main(){ fun(); return 0; }
第一版Makefile
.PHONY:cleanall: main.o fun.ogcc -o app main.o fun.omain.o : main.c gcc -o main.o -c main.cfun.o : fun.c gcc -o fun.o -c fun.cclean:rm app main.o fun.o
可以发现,Makefile里面有很多重复的内容,我们可以利用变量和模式规则对其进行优化。
2、自动变量
$@:用于表示一个规则中的目标。当有多个目标时,$@指的是其中任何导致规则命令被运行的自标。
$^:表示的是规则中的所有先决条件。
$<:表示的是规则中的第一个先决条件。
是不是看得有点晕?没关系,我们基于上面的Makefile,做一点点修改,把这些东西都打印出来看一下,就很清楚了。
.PHONY:cleanall: main.o fun.ogcc -o app main.o fun.o@echo "\$$@ = $@"@echo "$$^ = $^"@echo "$$< = $<"main.o : main.c gcc -o main.o -c main.cfun.o : fun.c gcc -o fun.o -c fun.cclean:rm app main.o fun.o
运行make,终端打印如下内容
gcc -o app main.o fun.o$@ = all$^ = main.o fun.o$< = main.o
了解到这些之后,我们再次修改
第二版Makefile
.PHONY:cleanall: main.o fun.ogcc -o app $^main.o : main.c gcc -o $@ -c $^fun.o : fun.c gcc -o $@ -c $^clean:rm app main.o fun.o
3、变量的类别与赋值
变量的类别有递归扩展变量和简单扩展变量
3.1 递归扩展变量
这种只用一个“=”符号定义的变量被称为递归扩展变量
.PHONY:allgoal = $(mid)mid = $(fun)fun = testall:@echo "goal = $(goal)"
运行make命令 ,打印如下
goal = test
3.2 简单扩展变量
用“:=”操作符来定义的,make只对其进行一次展开。
.PHONY:allgoal_A = hello mid_A = $(goal_A) worldgoal_A = testgoal_B := hellomid_B := $(goal_B) worldgoal_B := testall:@echo "mid_A = $(mid_A),mid_B= $(mid_B)"
运行make命令 ,打印如下
mid_A = test world,mid_B= hello world
3.3 变量条件赋值
用“?=”操作符来定义,如果变量没有被定义,将右边的值赋值给它,如果变量已经定义了,则不改变其原值。
.PHONY:allfunA = originalfunA ?= replacementfunB ?= replacementall:@echo "funA = $(funA),funB = $(funB)"
运行make命令 ,打印如下
funA = original,funB = replacement
3.4 变量追加赋值
通过“+=”实现追加赋值
.PHONY:allobjects = main.o fun.oobjects += append.oall:@echo "objects = $(objects)"
运行make命令 ,打印如下
objects = main.o fun.o append.o
3.5 高级变量引用功能
在赋值的同时,完成文件名后缀替换操作
.PHONY:allsrc = a.c b.c c.cobjs := $(src:.c=.o)all:@echo "objs = $(objs)"
运行make命令 ,打印如下
objs = a.o b.o c.o
注意,src:.c=.o 冒号后面不能有空格,如果加了空格变成src: .c=.o ,运行make,打印的结果如下
objs = a.c b.c c.c
4、模式规则
一个模式规则的格式为:
%.o : %.c command...
我们利用模式规则对第二版的Makefile进行优化
第三版Makefile
#替换掉这部分#main.o : main.c #gcc -o $@ -c $^#fun.o : fun.c #gcc -o $@ -c $^.PHONY:cleanall: main.o fun.ogcc -o app $^%.o : %.cgcc -o $@ -c $^clean:rm app main.o fun.o
这里将两条构建目标文件的规则变成了一条
" %" 类似于通配符,%.c匹配所有以".c "结尾的文件,采用了模式以后,不管有多少个源文件,都可以用同一条规则,可以极大的简化Makefile
5、利用变量和模式规则优化Makefile
我们再对第三版的Makefile进行优化,将编译器,目标等都用变量替代,这样以后修改只需要改动变量部分就好了
第四版Makefile
.PHONY:cleanCC = gccRM = rmTARGET = appOBJS = main.o fun.o$(TARGET) : $(OBJS)$(CC) -o $@ $^%.o : %.c$(CC) -o $@ -c $^clean:$(RM) $(TARGET) $(OBJS)
到这里,Makefile已经得到了很大的改善,但是我们可以看到OBJS = xxxx 这里,如果文件数量多,得一个个书写,还是不够智能。
下一篇文章,将介绍Makefile函数的使用,利用函数可以轻松管理好源文件和目标文件。————————————————————————————————
码字不易,点个赞再走吧!
欢迎关注我的同名公众号,这里有更多好料等着你哦!
-
【播资讯】不为人知的网络编程(十五):深入操作系统,一文搞懂Socket到底是什么
这篇文章我打算从初学者的角度,用通俗易懂的文字,跟大家分享下我所理解的socket是什么,并由浅入深从...
来源: 【播资讯】不为人知的网络编程(十五):深入操作系统,一文搞懂Socket到底是什么
轻松玩转makefile | 变量与模式
天天百事通!3888元 + 可叠加百亿补贴:天猫无门槛红包12点正式开抢
4条狼青犬咬死几十只羊!警惕:性情凶狠、攻击性非常强
全球微头条丨211文科硕士吐槽均薪5500引争议:文科生转码或成趋势 还是理科香?
报道:“RNG老板道歉”登热搜 CEO:轮换中单是我的决定
【世界播资讯】李想:理想汽车要占20万元以上市场35% 将对标苹果特斯拉
垂头丧气的丧是什么意思?关于垂头丧气的反义词有哪些?
头条焦点:百分比堆叠柱状图适用情形有哪些?速戳!
父亲的兄弟如何称呼?写给父亲的一封信作文模板
张靓颖的海豚音是哪首歌?张靓颖终于等到你的歌词是什么?
李想:如果不卖电池 电动车成本可以比燃油车低
热议:马斯克最疯计划曝光!给我10万亿美元:可拯救地球
梅西花百万买苹果手机送给阿根廷队友:定制了35部24K金的iPhone 14 Pro
天天微头条丨河南小伙1:1打造歼10战斗机模型!司机:这辈子拉过最硬的货
每日简讯:奇瑞背刺长城 捷途旅行者实车亮相:10多万的“硬汉”登场
早晨问候客户的正能量句子有哪些?早晨问候语有哪些?
仓央嘉措是哪个朝代的?仓央嘉措经典诗句有哪些?
蓝码健康码是什么意思?蓝码健康码是正常的吗?
32开纸是多大?32开纸有多大是几个A4?
ps字体怎么加描边?ps字体太小怎么调大?
移动硬盘参数怎么看?移动硬盘参数错误怎么解决?
usd是什么意思?usdt属于什么币种?
全球快讯:带有雨的诗句有哪些_带有雨的诗句具体有哪些
环球观焦点:WebLogic JNDI注入(CVE-2021-2109)
天天通讯!Java 根据模板导出PDF
从菜鸟程序员到高级架构师,竟然是因为这个字final
剑指 Offer 64. 求 1 + 2 + … + n(java解题)
当前简讯:浙江女子1600公里追到广州找到被偷的爱猫:苹果AirTag定位器立了大功
比亚迪豪华MPV成了!腾势D9上月热销7325台:均价41.5万
简讯:俞敏洪最新演讲:不喜欢《狂飙》 企业家只想赚钱就会像高启强后患无穷
复旦MOSS团队:取名是致敬《流浪地球2》 参数规模约ChatGPT的1/10
世界热推荐:跑着跑着会熄火 日产北美召回超80万辆奇骏:车钥匙背锅
环球头条:Git介绍下载安装以及基本使用
全球新消息丨解释器模式
每日时讯!promethues【centos7】时间同步
What is Point ?
【全球新要闻】那舅特大桥建成 又一时速350高铁开铺 南宁至玉林仅50分钟
3899元起 惠普战66六代锐龙版上架:锐龙7000系列加持
世界热议:3月17日开启Beta测试!《暗黑破坏神4》新预告片透露更多游戏内容
焦点短讯!拳头《无畏契约》3月14日起不再支持Win7/8/8.1系统:为了打击外挂!
论文阅读笔记(四):AS-MLP AN AXIAL SHIFTED MLP ARCHITECTUREFOR VISION
(数据库系统概论|王珊)第七章数据库设计-第五、六节:物理结构设计和数据库的实施和维护
全球消息!苹果何时大降价?iPhone 14 Plus成系列销量最差:用户宁愿买安卓
焦点信息:寓言诚不欺我!网友拍下现实版“乌鸦喝水”
焦点报道:儿子篮球班倒闭家长花1000万买下 网友:这就是钞能力
全球热议:999元卷王小金刚!优派推出VX2758显示器:27英寸2K/170Hz
15万就能买特斯拉?特斯拉宣布重大目标:成本降低50%
哪吒汽车2月份交付10073台 同比大涨41.5%
未成年人沉迷短视频得治 TikTok默认限制每天可刷一小时
“自己造自己” 特斯拉人形机器人亮相!马斯克承认罕见事实
【世界速看料】腾讯新游《黎明觉醒:生机》开放60帧:骁龙888、iPhone 13以上都能开
每日视点!印度男子展示绝技“乌鸦召唤术” 网友:在古代至少巫师级别
读Java性能权威指南(第2版)笔记06_数据库性能JPA&SpringData
全省严查!正在进行!
每日看点!马斯克大力推荐!特斯拉Cybertruck实车亮相:超级未来感
天天消息!马斯克宏图计划公布:储能240TWh 制造投资10万亿美元
日本死亡人数是新生儿数量两倍有多可怕:850万“幽灵屋”遍布全国
信息:特斯拉下一代电机将不需要任何稀土成分!马斯克挑战全球车企
环球新动态:Spark系列 - (5) Spark Shuffle
热消息:Fireasy3 揭秘 -- 万物伊始(依赖注入与服务发现)
全球信息:英语四级阅读技巧
一加Ace 2V 12+256G起步行业罕见:友商还在搞8+128卡价位的版本
实时:Redmi Note 12 Pro极速版12+256G到手1999元:开机就是MIUI 14
造车新势力2月交付量出炉:理想、蔚来、哪吒破万 零跑压力大
【全球速看料】厦门征求意见!过马路玩手机或将罚款50元 你支持吗?
世界快看:东风概念飞行汽车外观曝光!“鸥翼门”相当炫酷
【当前热闻】2018巴彦淖尔国际马拉松
环球焦点!胡明轩:平时杜导叫我和徐杰一起训练 要求我们承担起更多责任
世界快讯:makefile
基于alpine基础镜像构建jdk镜像以及tomcat镜像及业务构建
Linux极简入门系列(六):其它补充
CSS全局关键字
环球聚焦:委员建议隔周三休成热搜第一 网友吵翻 专家:很难行得通
今日热闻!Model 2明天发?这款15万的特斯拉便宜车:马斯克已经说了17年
环球新消息丨LOJ 3276 JOISC 2020 Day2 遗迹 题解 (计数DP)
环球快资讯:MySQL学习笔记-多表查询(上)
当前视讯!量化交易基础 - 011 - 样本外检验
风语筑(603466):上海风语筑文化科技股份有限公司关于股东权益变动比例超过1%的提示性公告
天天观察:希望工程发文感谢《原神》玩家 5天9万多人捐赠240万元
世界聚焦:“刺客”又来了!网友称买到1600元一斤话梅:每颗至少20元
“窄边教科书”上新!戴尔XPS15 9530发布:13代酷睿+RTX 40配8TB SSD
环球微动态丨孟菲斯动物园发大熊猫丫丫新动态 网友:尽快回国!
曝苹果屏下Face ID技术有缺憾:2026年才会趋于完美
C++ STL学习笔记-C++ STL基础
焦点讯息:4-Ribbon负载均衡
信息:可取代eSIM:更完美的iSIM卡来了
二月浏览器大战结果出炉:微软Edge用户数不升反降
头条:《王者荣耀》干将莫邪画中仙皮肤公布:中国古风莫邪绝美
环球微头条丨k8s之list-watch机制、节点调度以及亲和性
全球速讯:记录--虚拟滚动探索与封装
天天百事通!(数据库系统概论|王珊)第七章数据库设计-第四节:逻辑结构设计
焦点热议:Cesium 几何体贴模型 sampleHeight(二十二)
环球滚动:苏富比春拍上海预展即将开展,近150件藏品由谁保驾护航?
全球即时看!蔚来2022年财报公布:全年营收492亿元 同比大涨36%
天天资讯:建议元宵节放假1天:提升人民幸福指数
环球通讯!超19万辆!比亚迪2月新能源销量公布:暴打新势力全家
全球微头条丨2023五一档电影增至五部!哪部对你吸引力更大?
热点!Cesium Transform(二十)
世界速讯:第124篇: 期约Promise