make是一个命令,Makefile是一个文件,Makefile通常放在源代码下
1、见见猪跑
先随便写一段代码

然后在源代码的目录下vim一个Makefile文件
这里要形成一个可执行文件test,但是最终是要用test.c写的,就可以这样写

而且后续要以Tab开头

这个就是基本的Makefile
然后退出vim,输入make指令,它会自动的在当前路径下寻找Makefile文件,然后取执行已经内置好的gcc指令
随后就生成可执行程序,再就可以运行了

这里代码写好了,就可以用rm删除,但是有时候不小心后缀写错了就会删错文件,为了避免这种情况,就可以在在Makefile中配置一下,写一个清理的代码

这时,想清理的时候直接make clean

从此以后,我们对源代码无论做多少修改只要make一下就行,不要的时候也可以随时清理
2、熟悉规则
Makefile是一个围绕依赖关系和依赖方法构建的一个自动化编译的工具
依赖关系
这里我们要用 test.c 形成test,我们通常把他们之间的这种关系叫做依赖关系
依赖方法
下面的这个内容就叫做依赖方法
![]()
我们要根据test.c形成test,到底要怎么形成呢,这里就需要对应的操作方法
感性理解:
小明上大学了,月底没生活费了,他给他爸爸打电话,接通后就说了句:爸,我是你儿子。就挂了 那么这样能要到生活费吗,其实并不能,这里小明仅仅是和他老爹表明了依赖关系
正确的做法是 接通电话表明关系后再说一下没有生活费了,这样有了正确依赖关系和依赖方法,才能达到目的
换言之,小明如果给他舍友的爸爸打电话,说一句 爸爸我是你儿子,也不能要到生活费,因为这样依赖关系就错了
或者小明给他爸爸说
我是你儿子,所以你给我做一下作业,这样大概率会被打,这个就属于依赖关系正确,依赖方法错误
这里我们再次打开Makefile
看看这段代码

这里是跟前面的关系串起来了,我们要形成myfile就要有myfile.c,myfile.c则要myfile.s,就要有myfile.imyfile.i就要找到myfile.c至此我们用.c文件形成.i文件,用.i文件形成.s文件,用.s文件形成.o文件,用.o文件形成myfile,最后形成可执行程序
上面只有依赖关系,这下再补上依赖方法就完成了

再执行一下
然后就会把刚刚的代码一瞬间执行了

刚刚的代码仅仅是用来演示的,自己操作时不需要这么多

注:
在依赖关系中,目标文件对应的依赖文件列表可以是空
我们通常把冒号左边的叫目标文件,冒号右边的叫做依赖文件
![]()
像这种的同样也能实行
![]()

类似这样就是一键清理

还有一个疑问,为什么执行test的时候直接make就行了,而执行clean时还要写全?
其实在Makefile中,test是从上至下扫描所遇到的第一个真正的目标文件,而clean虽然没有依赖文件,但也是一个独立的依赖关系和依赖方法,Makefile在扫描时默认只会执行第一组依赖关系和方法,test刚好时第一个,所以make就可以执行,反言之,把清理放在前面,就会先运行清理
其实之前还有个.PHONY这个其实时Makefile语法中的一个关键字;它的含义是,总是被执行
一般把.PHONY修饰的符号叫做伪目标

如果make出来的可执行程序是最新的再点击make就不会再执行了
关于这个是怎么判断的呢,确实是根据源代码的最近修改时间与可执行程序之间进行比较,如果源代码晚一些,那可执行程序就是最新的,就不让你再编了


被折叠的 条评论
为什么被折叠?



