首先要了解一下makefile是什麼東西,有什麼作用!官方的話就不說了,簡單粗暴了解。makefile就是內建編譯,比如說你寫了好多個**.c**檔案。平常就是一個一個gcc,就算你編譯好了還要一個個運作不是太費事了嘛!是以makefile的存在就是“內建編譯”一下子編譯成一個檔案。這樣編輯運作起來不就簡單太多了莫。廢話不多說直接上代碼,順帶說一下子產品化程式設計:
我先建立一個makefile檔案
vim makefile
任何建立方式都行隻要建立的是文本檔案就行。centos或者Ubuntu下的
gedit makefile
,deepin下的
dedit makefile
都是可以的。
接下來我們具體以例子說明。首先寫一個最簡單的C語言程式
#include <stdio.h>
void main()
{
printf("hello makefile\n");
}
經過gcc後生成了text可執行檔案,下面我們給删除使用makefile來寫。
我們來解釋一下:text就是你要編譯成的可執行檔案,text然後**:**後面再跟一個空格 然後輸入你的依賴檔案。你是要編譯hello.c檔案,是以你的依賴檔案就是hello.c。完整第一句就是
text: hello.c
然後換行,注意到換行後前面差不多有4個空格,那不是空格是按一下tap按鍵形成的,這裡必須要按下tap按鍵。我用的是deepin系統,再vim中按下換行自動就形成了,如果在别的系統按下換行後還是首個格子一定要按下
tap
鍵然後就是寫我們要執行的指令,
gcc hello.c -o text
意思就是編譯hello.c檔案并且生成檔案名為text的可執行檔案。然後儲存退出。接着我們再終端下輸入
make
運作makefile檔案。
可以清楚看到再執行make後系統就運作了gcc hello.c -o text指令,./text後可以運作。
接下來我們看一下子產品化程式設計如何使用makefile:
涉及到三個檔案tool.c,tool.h,和main.c
我們先來看tool.c
main檔案
可以看出find_max是一個比較大小的函數,傳入數組和數,通過數組中的元素和傳入的數比較大小,輸出數組中最大的那個數。即直接再mian函數裡面直接調用find_max函數,在tool.c檔案裡面寫find_max函數。那麼注意到find_max函數并沒有聲名,是以我們在tool.h檔案裡面聲名
.c
檔案都是函數部分,
.h
檔案是函數的聲名和一些參數的定義。
我們看一下tool.h檔案
#ifndef _TOOL_H
#define _TOOL_H
#include <stdio.h>
int find_max(int arr[],int n);
#endif
在
.h
檔案裡:
#ifndef _TOOL_H
#define _TOOL_H
·
·
·
#endif
格式都是這樣,注意圖中化框的部分一般情況下_TOOL_H這是個參數,一般為_檔案名_H這個格式,(其實寫什麼都行)子產品化程式設計就是這個要求。
在tool.h檔案裡面我們對find_max函數進行了聲名,以及頭檔案
#include <stdio.h>
的調用,這樣我們在使用頭檔案時候隻需要調用
#include "tool.h"
即可,注意這裡面包含了find_max函數的聲名,在調用這個函數的檔案必須調用
#include "tool.h"
。
接下來我們看一下makefile的編寫:
main: main.c tool.o
gcc main.c tool.o -o main
tool.o: tool.c
gcc -c tool.c
clean:
rm *.o main
main.c裡面就是主函數,tool.c是寫函數的檔案,tool.h是寫的函數的聲名檔案。
看第一行main: main.c tool.o,解釋一下tool.o檔案是tool.c檔案編譯成的中間檔案。假設這個程式有多個函數,那麼就會用多個.o檔案,tool2.o tool3.c tool4.o、、、、、直接跟在後面即可。gcc就是對這些整體進行編譯。
tool.o: tool.c
gcc -c tool.c
這一部分就是将tool.h編譯成中間檔案tool.o的過程,注意-c是參數。意思是編譯成
.o
檔案.
clean 這一部分是删除部分,意思是删除編譯生成的可執行檔案mian和所有
.o
檔案。
我們看一下運作結果:
這就是這一部分的makefile最簡單的基礎,後續還會繼續更makefile.歡迎指正交流。謝謝