单文件夹下的C程序如何编写Makefile文件

来源:互联网 发布:java 6 api中文 在线 编辑:程序博客网 时间:2024/06/05 20:47
通过学习已经学会了GCC的一些基础的命令,以及如何将C语言源代码编译成可执行文件。

  我们已经知道在linux环境下编译源码时,常会有以下三个步骤:

    ./configure  

    make

    make clean

  执行./configure时,会检查系统的配置等,得到相关的有用的信息,生成Makefile文件。

  执行make命令时,make命令解释Makefile文件中的规则,生成目标文件。

  执行make clean会删除生成目标文件过程中的生成的中间文件。

  

  Makefile文件是可以由我们手工建立的:接下来是编写在同一个文件夹下的程序的Makefile文件。

  文件有compute.c与m.h,代码如下:

1 //compute.c2 #include<stdio.h>3 #include"m.h"4 int main(){5     int a=2,b=3;6     printf("a+b=%d\n",add(a,b));7     printf("a*b=%d\n",multi(a,b));8     return 0;9 }

  

 1 //m.h 2 int add(int a,int b){ 3     int c; 4     c = a+ b; 5     return c; 6 } 7  8 int multi(int a, int b){ 9     int c=a*b;10     return c;11 }

  编写的Makefile文件如下:

 1 #makefile 2 objects=compute.o 3 CC=@gcc      #如果没有@符号,gcc的命令就会输出到终端 4 CPP=@gcc -c  #如果有@符号,gcc的命令就不会输出到终端 5  6 compute:$(objects) 7     $(CC) -o compute $(objects) 8  9 #标准写法10 compute.o:compute.c m.h11     $(CPP) compute.c12 13 14 #简写形式;15 #make自动推导 因为要生成.o文件,就需要相关联的compute.c文件,16 #make会自动生成gcc -c compute.c的命令17 #compute.o:m.h18 19 clean:            20     @rm compute $(objects)

  接下来,执行make命令,就会生成compute.o文件与可执行文件compute.

$ ls -l总用量 12-rw-r--r-- 1 qi qi 133 5月  16 17:18 compute.c-rw-r--r-- 1 qi qi 224 5月  17 14:38 Makefile-rw-r--r-- 1 qi qi 105 5月  16 17:14 m.h$ make $ ls -l总用量 28-rwxr-xr-x 1 qi qi 8480 5月  17 19:23 compute-rw-r--r-- 1 qi qi  133 5月  16 17:18 compute.c-rw-r--r-- 1 qi qi 1944 5月  17 19:23 compute.o-rw-r--r-- 1 qi qi  224 5月  17 14:38 Makefile-rw-r--r-- 1 qi qi  105 5月  16 17:14 m.h

 

  执行make clean会按照Makefile文件中的伪目标clean,对文件进行删除操作。

$ make clean $ ls -l总用量 12-rw-r--r-- 1 qi qi 133 5月  16 17:18 compute.c-rw-r--r-- 1 qi qi 224 5月  17 14:38 Makefile-rw-r--r-- 1 qi qi 105 5月  16 17:14 m.h