makefile(详细讲解)

目录

  • 1.makeflie
  • 2.多个文件执行makefile

1.makeflie

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

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

2.多个文件执行makefile

依次创建以下文件
test.c

#include"test.h"


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

test.h

#include


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

makefile(详细讲解)_第12张图片

你可能感兴趣的:(linux,linux,运维,服务器)