linux學習筆記:05-多文件編譯&Makefile

認識Makefile

什麼是Makefile
Make:是一個解決大工程編譯的工具
Makefile:就像是腳本文件一樣,裏面描述着哪些文件需要編譯,哪些需要重新編譯,它裏面還可以執行系統命令。
使用時只需要一個make命令即可完成整個工程的自動編譯。
它其實就是和我們平時用的IDE裏面的編譯功能是一樣的,只不過這些IDE對其進行了封裝,讓我們看到的就是圖形界面了,我們在 IDE中添加要編譯的工程文件,然後點擊按鈕就完成了編譯。

下面通過例子來進一步認識Makefile
假設我們完成設計一個以下工程,
①通過鍵盤輸入兩個整數,然後計算他們的和並將結果顯示在屏幕上,
②在這個工程中我們有 main.cinput.cadd.c這三個 C 文件和input.hadd.h
兩個頭文件。
③其中 main.c是主函數, nput.c 負責接收從鍵盤輸入的數值, add.h進行任意兩個數相加,

代碼:
main.c

  1 #include <stdio.h>                                         
  2 #include <input.h>
  3 #include <add.h>
  4 
  5 int main (int argc, char *argv[])
  6 {
  7     int a,b,num;
  8 
  9     input_init(&a, &b);
 10     num = add(a, b);
 11 
 12     printf("%d + %d = %d\n",a,b,num);
 13 
 14 }

input.c

 1 #include <stdio.h>                                         
  2 #include <input.h>
  3 
  4 void input_init(int *a, int *b)
  5 {
  6     printf("輸入兩個整數:");
  7     scanf("%d, %d",a,b);
  8     printf("\r\n");
  9 }

add.c

1 #include <stdio.h>                                         
  2 #include <add.h>
  3 
  4 int add(int a, int b)
  5 {
  6     return (a+b);
  7 }   

input.h

  1 #ifndef _INPUT_H_
  2 #define _INPUT_H_
  3 
  4 void input_init(int *a, int *b);
  5 
  6 #endif 

add.h

  1 #ifndef _ADD_H_                                            
  2 #define _ADD_H_
  3 
  4 int add(int a, int b);
  5 
  6 #endif    

下面我們先用常規的方法編譯文件–>gcc編譯器將上面的main.cadd.cinput.c進行多文件編譯,如下

最後編譯生成的可執行文件叫做main。執行./main,輸入兩個字查看結果。
在這裏插入圖片描述

下面再用編寫Makefile來編譯以上文件

1、 首先在此工程目錄下創建一個名爲Makefile的文件!一定要是這個文件名!!
Makefile如下:

  1 main: main.o input.o add.o                                 
  2     gcc -o main main.o add.o input.o
  3 main.o: main.c
  4     gcc -c main,c
  5 input.o: input.c
  6     gcc -c input.c
  7 add.o: add.c
  8     gcc -c add.c
  9 
 10 clean:
 11     rm *.o
 12     rm main

在這裏插入圖片描述
make ---- >> ./main
在這裏插入圖片描述
Makefile中最後一條規則意思是在執行以後就會刪除當前目錄下所有的.o文件以及 main,因此clean的功能就是完成工程的清理,如圖輸入make clean
在這裏插入圖片描述

下面再來 ---- >>> 利用makefile語法精簡makefile的書寫(具體語法規則 load…

Makefile如下:

1 #Makefile 變量的使用                                       
  2 
  3 object = main.o input.o add.o
  4 main: $(object)
  5     gcc -o main $(object)
  6     
  7 
  8 %.o : %.c
  9     gcc -c $<
 10 
 11 clean:
 12     rm *.o
 13     rm main

在這裏插入圖片描述

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