認識Makefile
什麼是Makefile
Make
:是一個解決大工程編譯的工具
Makefile
:就像是腳本文件一樣,裏面描述着哪些文件需要編譯,哪些需要重新編譯,它裏面還可以執行系統命令。
使用時只需要一個make
命令即可完成整個工程的自動編譯。
它其實就是和我們平時用的IDE裏面的編譯功能是一樣的,只不過這些IDE
對其進行了封裝,讓我們看到的就是圖形界面了,我們在 IDE
中添加要編譯的工程文件,然後點擊按鈕就完成了編譯。
下面通過例子來進一步認識Makefile
假設我們完成設計一個以下工程,
①通過鍵盤輸入兩個整數,然後計算他們的和並將結果顯示在屏幕上,
②在這個工程中我們有 main.c
、input.c
和 add.c
這三個 C 文件和input.h
、add.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.c
、 add.c
和 input.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