單文件夾下的C程序如何編寫Makefile文件

通過學習已經學會了GCC的一些基礎的命令,以及如何將C語言源代碼編譯成可執行文件。

  我們已經知道在linux環境下編譯源碼時,常會有以下三個步驟:

    ./configure  

    make

    make clean

  執行./configure時,會檢查系統的配置等,得到相關的有用的信息,生成Makefile文件。

  執行make命令時,make命令解釋Makefile文件中的規則,生成目標文件。

  執行make clean會刪除生成目標文件過程中的生成的中間文件。

  

  Makefile文件是可以由我們手工建立的:接下來是編寫在同一個文件夾下的程序的Makefile文件。

  文件有compute.c與m.h,代碼如下:

1 //compute.c
2 #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.h
11     $(CPP) compute.c
12 
13 
14 #簡寫形式;
15 #make自動推導 因爲要生成.o文件,就需要相關聯的compute.c文件,
16 #make會自動生成gcc -c compute.c的命令
17 #compute.o:m.h
18 
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

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章