make和makefile

本文介绍了make和makefile的基本使用,包括创建makefile、设置依赖关系、清理文件以及处理makefile中的小细节,如依赖方法、编译效率和时间检查。还提到了如何使用PHONY指令控制非文件操作的make行为。
摘要由CSDN通过智能技术生成

make是一条指令

makefile是一个文件

make和makefile一般都是两两配合使用,熟练掌握这俩的使用方法会对我们以后完成大型工程的能力打下基础

一、基础使用

我们知道,使用gcc/g++运行程序时需要输入许多 指令,而make/makefile可以很好的帮助我们节省掉这些繁杂的编写过程,接下来我先告诉大家如何使用:

在需要编译的文件的同级目录下创建文件makefile,用vim打开后输入指令,直接用图演示:

顺便我们来讲讲依赖关系和依赖方法

图中第一行test:test.c为依赖关系,test.c即将生成test的关系,第二行为该依赖关系的实现方法即为依赖方法

保存退出之后,我们直接输入make就可以对test.c编译成可执行程序:

之后我们对makefile进行修改:

我们写了一个清理清理掉生成的可执行文件,此类不需要依赖关系,直接在依赖方法中写即可,之后只需输入make  clear就可以清理掉可执行文件:

有的人就会问,为什么我们使用clear要再make后面写名字而编译不用?这时我们换一下clear和上面程序的先后顺序看一下:

我们看到,makefile定义的指令在第一行或者在第一次走的程序只需要输入make就可执行,往下都要输入对应的命名。

二、使用make和makefile时小细节

有图我们可以看到,make之后如果不修改文件属性或者修改源代码就不能多次make,为什么?

有一个直接的回答就是没必要,提高编译效率

那么,make是怎么做到的?

我们知道,一般是先有源文件,才有可执行文件,一般而言源文件的最近修改时间比可执行文件的时间要老,如果更改了源文件的最近修改时间,就会比可执行文件的时间更新,make限制我们多次make的实现方法就是比较两文件的时间新旧:

用指令stat来查看两文件的时间来对比一下:

结果很明显,如果我们修改一下test.c文件:

可以看到,test.c比test更新,这时候make就没有问题,(make判断的时间是以modify来判断)

access:最近访问时间

modify:对文件内容修改时间

change:对文件属性修改时间

一般来讲在改变test.c文件内容时,内存什么的也会发生变化,相当于熟悉也发生了变化,所以change也会跟着改变,但在例如修改文件权限时就只会有change改变。

access一般更新文件三四次才更新一次时间,为了节约磁盘消耗增加效率

但是,如果我就是想一直不修改文件而一直make怎么办?

一种方法就是用touch来把文件时间改到最新,当然这个很麻烦

第二种方法就是在makefile里提供了一条指令:PHONY:name

特殊符号:

$@代表依赖关系中左边,$^代表依赖关系的右边名字

如果不想显示编译过程,在gcc前加@即可

评论 28
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值