论Makefile的重要性(一)-----Linux C开发

  我们在开发程序的过程中,一般使用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.c
int sub(int a, int b)
{
    return a-b;
}

mul.c
int mul(int a, int b)
{
    return a*b;
}

div.c
int devl(int a, int b)
{
    return a/b;
}

add.c
int add(int a, int b)
{
    return a+b;
}
main.c
int 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.o
add.o:add.c
	gcc -c add.c
sub.o:sub.c
	gcc -c sub.c
mul.o:mul.c
	gcc -c mul.c
devl.o:devl.c
	gcc -c devl.c

.PHONY:clean
clean:
	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的所有文件都会重新编译。



 

posted @ 2016-08-21 14:21  KyrieHe  阅读(374)  评论(0编辑  收藏  举报