makefile
make是一个命令工具,它解释Makefile 中的指令(应该说是规则)。在Makefile文件中描述了整个工程所有文件的编译顺序、编译规则。Makefile 有自己的书写格式、关键字、函数。像C 语言有自己的格式、关键字和函数一样。而且在Makefile 中可以使用系统shell所提供的任何命令来完成想要的工作。Makefile(在其它的系统上可能是另外的文件名)在绝大多数的IDE 开发环境中都在使用,已经成为一种工程的编译方法。
makefile带来的好处就是——“自动化编译”,一旦写好,只需要一个make命令,整个工程完全自动编译,极大的提高了软件开发的效率。
使用
makefile的命令:
目标: 依赖文件
(tab) 命令
这是一个文件的依赖关系,也就是说,这一个或多个的目标文件依赖于其后的依赖文件,其生成规则定义在命令中。注意:命令之前必须至少有一个tab,否则make失败。
简单来说,我们有一个.c文件,需要用它来生成一个.o文件,就可以用makefile编写:
.o文件:.c文件
gcc -c .c -o .o
大致规则是这样,如果一个工程下有非常多的文件需要这样编译,我们用一个makefile编写就可以一次到位了。
实例
首先,我们建立一个工程目录,在其下创建四个文件,
以下为例:
我们创建了四个文件,add.c,add.h,sub.c,sub.h在建立一个main.c测试。
如果不使用makefile,我们就要一步步手动编译每一个文件,如果文件量巨大的话,显然不合适。
创建一个Makefile,vim打开它
编写如下:
main:add.o sub.o main.o
gcc add.o sub.o main.o -o main
add.o:add.c
gcc -c add.c -o add.o
sub.o:sub.c
gcc -c sub.c -o sub.o
main.o:main.c
gcc -c main.c -o main.o:
在make一下,这些需要链接在一起的文件就会被成功链接起来。
如果其中要修改某部分代码,之后在make一下,就会成功更新,并且,只重新编译修改过的文件,不会全部重新编译。
用makefile简单做了一个加减乘除的代码:
#include <stdio.h>
#include "add.h"
#include "sub.h"
#include "mul.h"
#include "div.h"
int main()
{
printf("add=%d\n",add(3,7));
printf("sub=%d\n",sub(3,7));
printf("div=%d\n",div(10,2));
printf("mul=%d\n",mul(3,7));
}
运行结果: