我们在开发程序的过程中,一般使用IDE较多,用C++、C#的使用Vistual Studio2012或者更高版本,用Java的使用Eclipse。一般企业使用这些IDE较多。但是在Linux环境下编程,我们使用什么呢,刚接触Makefile的时候感觉这货很神奇。用的久了就会发现话会大大的提高开发项目的效率,有人会说,我们一般不开发大型项目,就是写点小程序,用不着使用什么Makefile,但是如果你用过一次,我相信你会爱不释手,如果你掌握了如何编写Makefile,会对你将来的开发生涯有莫大的帮助,接下来咱们进入正题。
在C/C++语言开发过程中,我们首先是把源文件编译成中间代码,在Windows下就是.obj文件,Linux下就是.o文件,即目标文件(object file),然后将 大量的.obj/.o文件通过链接(link)生成可执行文件。
Makefile的规则:
target(目标):prerequisites(依赖/条件)
command (命令)
其中target是object file,可以依赖多个目标文件,prerequisites是生成target所需的文件或目标。command就是make要执行的命令。下面举例说明:
创建一个工程math,其中包含5个.c文件和一个.h文件。
sub.cint sub(int a, int b){ return a-b;}mul.cint mul(int a, int b){ return a*b;}div.cint devl(int a, int b){ return a/b;}add.cint add(int a, int b){ return a+b;}
main.cint main(void){ printf("add:%d\n",add(1,2)); printf("sub:%d\n",sub(1,2)); printf("mul:%d\n",mul(1,2)); printf("div:%d\n",div(1,2));}
common.h#ifndef MYMATH_H_#define MYMATH_H_int add(int a, int b);int sub(int a, int b);int mul(int a, int b);int devl(int a, int b);#endif
以下就是makefile的最简单写法:
libmath.a:add.o sub.o mul.o devl.o ar rcs libmath.a add.o sub.o mul.o devl.oadd.o:add.c gcc -c add.csub.o:sub.c gcc -c sub.cmul.o:mul.c gcc -c mul.cdevl.o:devl.c gcc -c devl.c.PHONY:cleanclean: rm -f add.o sub.o mul.o devl.o
在make之前 yun@Kyrie:~/yunfan/mf$ ls add.c common.h div.c main.c Makefile mul.c sub.c 在make之后 yun@Kyrie:~/yunfan/mf$ make gcc -c add.c gcc -c sub.c gcc -c div.c gcc -c mul.c ar rcs libyunfan.a add.o sub.o div.o mul.o yun@Kyrie:~/yunfan/mf$ ls add.c common.h div.o main.c mul.c sub.c add.o div.c libyunfan.a Makefile mul.o sub.o yun@Kyrie:~/yunfan/mf$ make clean rm -f add.o sub.o div.o mul.o yun@Kyrie:~/yunfan/mf$ ls add.c common.h div.c libyunfan.a main.c Makefile mul.c sub.c 如果修改其中一个.c后,在执行make时,与此.c的所有文件都会重新编译。