天天看點

linux之makefile編寫、Linux子產品化程式設計1(最簡單的方法)

首先要了解一下makefile是什麼東西,有什麼作用!官方的話就不說了,簡單粗暴了解。makefile就是內建編譯,比如說你寫了好多個**.c**檔案。平常就是一個一個gcc,就算你編譯好了還要一個個運作不是太費事了嘛!是以makefile的存在就是“內建編譯”一下子編譯成一個檔案。這樣編輯運作起來不就簡單太多了莫。廢話不多說直接上代碼,順帶說一下子產品化程式設計:

我先建立一個makefile檔案

vim makefile

任何建立方式都行隻要建立的是文本檔案就行。centos或者Ubuntu下的

gedit makefile

,deepin下的

dedit makefile

都是可以的。

linux之makefile編寫、Linux子產品化程式設計1(最簡單的方法)

接下來我們具體以例子說明。首先寫一個最簡單的C語言程式

#include <stdio.h>
void main()
{
	printf("hello makefile\n");
}
           
linux之makefile編寫、Linux子產品化程式設計1(最簡單的方法)

經過gcc後生成了text可執行檔案,下面我們給删除使用makefile來寫。

linux之makefile編寫、Linux子產品化程式設計1(最簡單的方法)

我們來解釋一下: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檔案。

linux之makefile編寫、Linux子產品化程式設計1(最簡單的方法)

可以清楚看到再執行make後系統就運作了gcc hello.c -o text指令,./text後可以運作。

接下來我們看一下子產品化程式設計如何使用makefile:

涉及到三個檔案tool.c,tool.h,和main.c

我們先來看tool.c

linux之makefile編寫、Linux子產品化程式設計1(最簡單的方法)

main檔案

linux之makefile編寫、Linux子產品化程式設計1(最簡單的方法)

可以看出find_max是一個比較大小的函數,傳入數組和數,通過數組中的元素和傳入的數比較大小,輸出數組中最大的那個數。即直接再mian函數裡面直接調用find_max函數,在tool.c檔案裡面寫find_max函數。那麼注意到find_max函數并沒有聲名,是以我們在tool.h檔案裡面聲名

linux之makefile編寫、Linux子產品化程式設計1(最簡單的方法)

.c

檔案都是函數部分,

.h

檔案是函數的聲名和一些參數的定義。

我們看一下tool.h檔案

linux之makefile編寫、Linux子產品化程式設計1(最簡單的方法)
#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

檔案。

我們看一下運作結果:

linux之makefile編寫、Linux子產品化程式設計1(最簡單的方法)

這就是這一部分的makefile最簡單的基礎,後續還會繼續更makefile.歡迎指正交流。謝謝

繼續閱讀