论坛
潜水/灌水快乐,沉淀知识,认识更多同行。
ToB圈子
加入IT圈,遇到更多同好之人。
朋友圈
看朋友圈动态,了解ToB世界。
ToB门户
了解全球最新的ToB事件
博客
Blog
排行榜
Ranklist
文库
业界最专业的IT文库,上传资料也可以赚钱
下载
分享
Share
导读
Guide
相册
Album
记录
Doing
搜索
本版
文章
帖子
ToB圈子
用户
免费入驻
产品入驻
解决方案入驻
公司入驻
案例入驻
登录
·
注册
只需一步,快速开始
账号登录
立即注册
找回密码
用户名
Email
自动登录
找回密码
密码
登录
立即注册
首页
找靠谱产品
找解决方案
找靠谱公司
找案例
找对的人
专家智库
悬赏任务
圈子
SAAS
IT评测·应用市场-qidao123.com
»
论坛
›
软件与程序人生
›
云原生
›
初识Linux · 有关makefile
初识Linux · 有关makefile
伤心客
论坛元老
|
2024-9-30 23:36:26
|
来自手机
|
显示全部楼层
|
阅读模式
楼主
主题
1025
|
帖子
1025
|
积分
3075
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要
登录
才可以下载或查看,没有账号?
立即注册
x
目次
媒介:
1 makefile的简单使用
2 makefile介绍
媒介:
我们上文介绍了gcc和g++的基本使用,带了许多的子指令,但是有的时候啊,一个一个敲指令确实有点麻烦了,此时,一个工具就能派上用场,即主动化工具makefile。
我们不妨理解为语言中的宏,下令的重新命名都可以通过makefile来表示,这就大大简化了工程量了,所以,有的时候makefile的使用从侧面也决定了工程的完备程序以及效率题目。
通过简单的介绍,我们知道了makefile是一个主动化下令工具,那么使用方法第一个是要创建makefile文件,makefile大概是Makefile都可以,我们在文件里面写入一些指令加上一点操作,我们就可以实现主动化指令了。
1 makefile的简单使用
我们不妨,先看看makefile的简单使用:
第一步是创建一个makefile文件并往里面写入一些指令->后面会介绍。
第二步则是先来一个实例代码:
然后,我们直接make一下,就可以创建一个test的可实行文件了,我们实行也是没有题目标:
此中,clean指令也是可以完成我们的预期操作的。
2 makefile介绍
我们从makefile文件中的第一个点开始:
第一行的test:test.c,此中test:test.c成为构成了依赖关系,test叫做目标文件,test.c是被test依赖的。
此中:后面的叫做依赖文件列表,不同的依赖文件可以用空格进行分割,也可以为空。那么下面的指令就是依赖方法,依赖方法前面只能使用Tab来空位置,不能使用四个空格,会报错。
这的理解我们可以理解为父子,儿子问父亲要钱,这里面存在父子之间的依赖关系,依赖方法是养育,所以给钱。
那么我们如果重复使用该下令呢?
它第一次是成功实行了的,但是后面就告诉说,test is up to date,表明test文件已经是最新文件了。
此时,前面文章埋的伏笔就可以拉出来了->
文件的ACM时间
。
我们首先看看test.c的ACM时间:
这里为什么不让多次实行编译的下令就是因为makefile工具比力的是源文件和可实行文件的ACM时间,如果可实行文件和源文件的ACM时间,在修改上有差别,make检测到源文件更新了,才会重新编译源文件,如许做的目标是提高效率,比如不能总一直编译已经编译好了的文件吧。
以及,不同的主动化工具对于时间的判断是不一样的,比如我们平时使用的VS,有的时候出现bug,重新清理一下办理方案,再运行就可以了,大多数就是因为时间的判断准则出现题目了,此时清空办理方案就是为了更新一下可实行文件的ACM时间,一比力,欸源代码早一点,重新编译就成功了。
但是,前面我们介绍了一个指令叫做touch,是用来创建文件的,好像在这里没有啥用处,但是使用touch可以改变ACM时间:
所以我们想要重复编译也可以使用touch改变ACM时间再进行编译即可。
此时,再引出一个关键词,.PHONY:
我们会发现clean总是可以实行的,这就是.PHONY做的事,被.PHONY修饰了的指令,默认可以重复实行,所以我们可以重复实行,那么我们同样可以把.PHONY给test修饰了
就可以重复编译了,此时clean也是可以重复实行的,因为clean是特别的方法,后面也不消跟任何东西:
那么如今来穷究原理部分,为什么我们直接make是实行的第一个指令呢?
因为makefile实行方向就是从上往下进行实行的,所以我们直接make,默认实行的是第一个指令,那么我们换个位置:
此时make就是实行的第一个语句了。
此时啊,学到这里,不免会觉得我每次使用指令都要给我打印出来,一点神秘感都没有,能不能不打印呢?
当然是可以的,此时用到的符号是@,@恣意的指令,就能让指令不表现出来:
此时make了一下之后,rm -rf之后也没表现:
此时同理。
所以@是只能应用一个指令,不是多行的,此时对echo@一下就可以了:
这里还有一个有意思的点是,makefile里面的注释是#,而且允许变量的存在,虽然说是变量,但是实际上就是宏了:
实行的操作实际上就是更换。
但是如许使用就会导致如上错误。
须要搭配$使用:
此时就没题目了。
这里涉及了更换,我们不妨再看看$@ $^:
不丢脸出,$@ $^分别取代的是目标文件和依赖文件。
好了,如今又提到了依赖关系,那么,我们看一段代码:
我们不难发现依赖关系是连着的,所以我们可以直接创建编译的三个阶段的文件。
那么既然依赖关系是连着的,试试打乱顺序呢?
可以发现,还是可以创建,岂非是说随意打乱顺序都没有题目标吗?
当然不是;
此时只能创建预处置惩罚期间的文件,可实行文件就创建不了了,凡事都要有一个带头的不是,所以可实行文件要放最开始:
感谢阅读!
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复
使用道具
举报
0 个回复
倒序浏览
返回列表
快速回复
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
or
立即注册
本版积分规则
发表回复
回帖并转播
回帖后跳转到最后一页
发新帖
回复
伤心客
论坛元老
这个人很懒什么都没写!
楼主热帖
《百万IT毕业生的心声:IT专业大学生毕 ...
Java打怪之路----谷粒商场认证服务 ...
xtrabackup2版本和xtrabackup8版本对比 ...
Excelize 发布 2.6.1 版本,支持工作簿 ...
sqlserver导入sql文件的方式
原型设计工具比较及实践--滴爱音乐 ...
Snowflake(雪花算法),什么情况下会 ...
Flink-使用流批一体API统计单词数量 ...
SQL Server 2008下载及安装
基于 SpringBoot + MyBatis 的博客系统 ...
标签云
AI
运维
CIO
存储
服务器
浏览过的版块
分布式数据库
DevOps与敏捷开发
程序人生
Java
鸿蒙
SQL-Server
容器及微服务
Mysql
快速回复
返回顶部
返回列表