目录
- 1.makeflie
- 2.多个文件执行makefile
1.makeflie
makefile带来的好处就是——“自动化编译”,一旦写好,只需要一个make命令,整个工程完全自动编译,极大的提高了软件开发的效率
make是一条命令,makefile是一个文件,两个搭配使用,完成项目自动化构建
我们使用makefile就在当前目录下创建makefile/Makefile前单字母大写小写都可以。
makefile里面会有什么东西呢?
makefile里面会有依赖关系
依赖关系 :比如有个可执行文件test,但是想有它就要有test.c这个就叫做依赖关系,而使用test.c形成test这个就叫依赖方法
了解了这个我们就来正式使用makefile
在马克file输入下面代码,注意第二行不是用空格,一定要用TAB键
![在这里插入图片描述](https://img-blog.csdnimg.cn/395a1a8fb61c4b06b82a6545b322e216.png)
我们再把mytest.c文件给写上
![在这里插入图片描述](https://img-blog.csdnimg.cn/98a935d73d2d412ca65473ef797e0b00.png)
这个时候我们就可以直接make,再运行make生成的可执行文件运行就行了
![在这里插入图片描述](https://img-blog.csdnimg.cn/bb26f3421bf248179a0442363255561f.png)
但是我们想要清理文件怎么办
vim makefile
![在这里插入图片描述](https://img-blog.csdnimg.cn/8d82868ee3fc4667a06976d34ea6c15c.png)
改成那样就可以了.PHONY这是一个伪目标
输入 make clean就可以清除mytest可执行文件了
![在这里插入图片描述](https://img-blog.csdnimg.cn/b8cfea47b5684f44bb5f84f881804b3b.png)
而至于为什么默认make是会执行make mytest而不是make clean是因为make mytest在上面,因为它是从上往下默认形成的
.PHONY:相当于makefile的语法格式中的一个关键字
比如clean被.PHONY修饰时,表明:总是被执行的
那么我们先来了解下总是不被执行的,比如下面的make 因为生成了mytest
所以接下的make除了第一次创建以外都会报错
![在这里插入图片描述](https://img-blog.csdnimg.cn/bd562ff11c3c48b6880490d10200d5cd.png)
而总是被执行就不会有这种问题,想执行多少次就执行多少次
![在这里插入图片描述](https://img-blog.csdnimg.cn/ada7fe06dff74f4c962737751fb3af04.png)
但是它是怎么区分目标文件的新旧的
![在这里插入图片描述](https://img-blog.csdnimg.cn/179d8a69b72f47018357ff6da8dbcba5.png)
Access表示读取或者进入的时间
再了解下面二个,我们先回忆下文件 = 内容加属性
Modify表示内容变了的时间
Change表示属性变了的时间
看下面图片我们只改变了属性,可以看到只有change时间变了
![在这里插入图片描述](https://img-blog.csdnimg.cn/feebfbdd72344a6687b19365f8af6ade.png)
但是这里要注意修改了内容,可能会改变属性,因为改变了内容,大小可能会发生变化
那么我们现在就来证明,因为旧文件比新文件生成的旧那么就不生成
![在这里插入图片描述](https://img-blog.csdnimg.cn/29eaed769cf247eda5b52d5ab824b6d8.png)
那么我们来用touch来改下Modiy的更新时间看看make会不会成功,我们不改原代码
![在这里插入图片描述](https://img-blog.csdnimg.cn/d2e67b816d034eae8faf1c8212032005.png)
可以看到重新生成了
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
![在这里插入图片描述](https://img-blog.csdnimg.cn/659cd8678dce4382ab9101337169d38f.png)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)