1、会不会写Makefile,从一个侧面说明了一个人是否具备完成大型工程的能力
2、一个工程文件不计其数,按照类型、功能、模块分别放在若干个目录中,makefile定义了一系列的规则来指定,哪些文件需要先编译,那些文件需要重新编译,甚至于进行更复杂的功能操作
3、makefile带来的好处就是-“自动化编译”,一旦写好,只需要一个make命令,整个工程完全自动编译,极大的提高了软件开发的效率
4、make是一个命令工具,是一个解释makefile中指令的命令工具,一般来说,大多数的IDE都有这个命令
5、make是一条命令,makefile是一个文件,俩个搭配使用,完成项目自动化构建
(1)make是一条命令,可以自动构建化项目,makefile是一个文件,而makefile文件里面包含了目标文件与原始文件的依赖关系。平常我们写一个C语言代码,编译程序运行程序按照下面步骤:
[YP@VM-4-8-centos test2_18]$ cat proces.c
#include
int main()
{
printf("hello word\n");
return 0;
}
[YP@VM-4-8-centos test2_18]$ gcc proces.c -o proces
[YP@VM-4-8-centos test2_18]$ ls
proces proces.c
[YP@VM-4-8-centos test2_18]$ ./proces
hello word
可以看出通过一条gcc proces.c -o proces命令可以生成proces编译好的文件,proces文件依赖于原始文件proces.c文件,它们通过gcc -o的方法来将原始文件编译完成。
(2)通过以上,可以写出makefile的第一条命令
1 proces:proces.c
2 gcc proces.c -o proces
命令的第一行代表的是依赖关系,第二行代表的是依赖方法
(3)makefile的第二条命令,清除生成的目标文件
1 proces:proces.c
2 gcc proces.c -o proces
3 .PHONY:clean
4 clean:
5 rm proces -f
.PHONY:的意思是定义一个伪目标,后跟命令总是可执行的,也就是make clean总是可执行的
(4)使用
通过以下命令就能简单的使用make/makefile命令
[YP@VM-4-8-centos test2_18]$ ls
makefile proces.c
[YP@VM-4-8-centos test2_18]$ make
gcc proces.c -o proces
[YP@VM-4-8-centos test2_18]$ ls
makefile proces proces.c
[YP@VM-4-8-centos test2_18]$ ./proces
hello word
[YP@VM-4-8-centos test2_18]$ make clean
rm proces -f
[YP@VM-4-8-centos test2_18]$ ls
makefile proces.c
[YP@VM-4-8-centos test2_18]$
1 #include "proces.h"
2
3 int main()
4 {
5 int a = 5;
6 int b = 3;
7 printf("a + b = %d\n",sum(a,b));
8 return 0;
9 }
1 #include "proces.h"
2
3 int main()
4 {
5 int a = 5;
6 int b = 3;
7 printf("a + b = %d\n",sum(a,b));
8 return 0;
9 }
1 #pragma once
2 #include <stdio.h>
3
4 int sum(int x, int y);
可 以 代 表 原 始 文 件 , ^可以代表原始文件, 可以代表原始文件,@可以代表目标文件
1 proces:proces.c main.c
2 gcc $^ -o $@
3 .PHONY:clean
4 clean:
5 rm proces -f
[YP@VM-4-8-centos test2_18]$ ls
main.c makefile proces.c proces.h
[YP@VM-4-8-centos test2_18]$ make
gcc proces.c main.c -o proces
[YP@VM-4-8-centos test2_18]$ ls
main.c makefile proces proces.c proces.h
[YP@VM-4-8-centos test2_18]$ ./proces
a + b = 8
[YP@VM-4-8-centos test2_18]$ make clean
rm proces -f
[YP@VM-4-8-centos test2_18]$ ls
main.c makefile proces.c proces.h
[YP@VM-4-8-centos test2_18]$