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
特殊符号:
$@代表依赖关系中左边,$^代表依赖关系的右边名字文章来源:https://www.toymoban.com/news/detail-857574.html
如果不想显示编译过程,在gcc前加@即可文章来源地址https://www.toymoban.com/news/detail-857574.html
到了这里,关于make和makefile的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!