makefile(详细讲解)

1.makeflie

makefile带来的好处就是——“自动化编译”,一旦写好,只需要一个make命令,整个工程完全自动编译,极大的提高了软件开发的效率
make是一条命令,makefile是一个文件,两个搭配使用,完成项目自动化构建
我们使用makefile就在当前目录下创建makefile/Makefile前单字母大写小写都可以。
makefile里面会有什么东西呢?
makefile里面会有依赖关系
依赖关系 :比如有个可执行文件test,但是想有它就要有test.c这个就叫做依赖关系,而使用test.c形成test这个就叫依赖方法
了解了这个我们就来正式使用makefile
在马克file输入下面代码,注意第二行不是用空格,一定要用TAB键
在这里插入图片描述
我们再把mytest.c文件给写上
在这里插入图片描述
这个时候我们就可以直接make,再运行make生成的可执行文件运行就行了
在这里插入图片描述

但是我们想要清理文件怎么办
vim makefile
在这里插入图片描述
改成那样就可以了.PHONY这是一个伪目标
输入 make clean就可以清除mytest可执行文件了
在这里插入图片描述
而至于为什么默认make是会执行make mytest而不是make clean是因为make mytest在上面,因为它是从上往下默认形成的
.PHONY:相当于makefile的语法格式中的一个关键字
比如clean被.PHONY修饰时,表明:总是被执行的
那么我们先来了解下总是不被执行的,比如下面的make 因为生成了mytest
所以接下的make除了第一次创建以外都会报错
在这里插入图片描述
而总是被执行就不会有这种问题,想执行多少次就执行多少次
在这里插入图片描述
但是它是怎么区分目标文件的新旧的
在这里插入图片描述
Access表示读取或者进入的时间
再了解下面二个,我们先回忆下文件 = 内容加属性
Modify表示内容变了的时间
Change表示属性变了的时间
看下面图片我们只改变了属性,可以看到只有change时间变了
在这里插入图片描述
但是这里要注意修改了内容,可能会改变属性,因为改变了内容,大小可能会发生变化
那么我们现在就来证明,因为旧文件比新文件生成的旧那么就不生成
在这里插入图片描述
那么我们来用touch来改下Modiy的更新时间看看make会不会成功,我们不改原代码
在这里插入图片描述
可以看到重新生成了

2.多个文件执行makefile

依次创建以下文件
test.c

#include"test.h"


void show()
{
  printf("hello hello hello \n");
}

test.h

#include<stdio.h>


extern void show();

main.c

#include"test.h"

int main()
{
  show();
  return 0;
}

makefile文件

hello:main.o test.o
		gcc -o hello main.o test.o
main.o:main.c
		gcc -c main.c -o main.o
test.o:test.c
		gcc -c test.c -o test.o
.PHONY:clean
clean:
		rm -f *.o hello

在这里插入图片描述

  • 6
    点赞
  • 35
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值