Makefile的例項講解

2021-07-14 23:19:28 字數 1707 閱讀 3089

makefile,顧名思義,它的作用是來生成檔案的。makefile可以對源**進行管理,可以完成編譯,鏈結,執行等階段。當編寫完成後,在終端執行make命令就可以執行makefile檔案中的行為,一鍵完成編譯,鏈結,執行等操作。非常的方便。makefile有自己的檔案規則,它可以定義和使用變數,他也有自己的賦值語句,可以使用函式,可以執行shell命令,makefile是向下依賴的,也就是說,寫在最後的最先執行,然後一級一級往上執行。windows下的好多編譯器都幫我們寫好了makefile,不用開發人員自己寫,但是如果你想做乙個合格的程式設計師,想完成大型專案,你就需要了解makefile,本文的**是在ubuntu下編寫的。

makefile的規則(請注意底下那段話)

target ... : prerequisites ...

command

......

target也就是乙個目標檔案,可以是object file,也可以是執行檔案。還可以是乙個標籤(label)。

prerequisites就是,要生成那個target所需要的檔案或是目標。

command也就是make需要執行的命令。(任意的shell命令)

下面我們來看乙個makefile檔案:

src = main.cpp

cc = g++

test:test.o

./test.o

test.o:$(src)

$(cc) $(src) -o test.o

clean:

rm -rf *.o test.o

上面就是乙個makefile的例子。

第1,2行,先定義兩個變數src和cc,並分別給他們賦值。

第4行,test是乙個標籤。這個標籤依賴test.o,當這個標籤被呼叫,就執行test.o

第5行,./test.o是shell的命令,表示執行test.o這個可執行檔案。在./test.o之前是乙個製表符,在makefile中,寫命令時要在命令之前寫個製表符。

第7行,在第4行,test標籤依賴乙個test.o,test.o從哪來呢,所以在這一行,就指明了test.o的生成需要哪些檔案,這裡寫了個$(src),是什麼意思呢,src是我們在第一行定義的變數,這裡引用了這個變數,$(src)就被替換成main.cpp,所以test.o生成需要main.cpp。makefile的變數有點像c語言中的巨集。

第8行,在第7行,寫了test.o的生成需要main.cpp,但是main.cpp又怎麼生成test.o呢,所以在這一行,就由main.cpp生成test.o。行的開頭以製表符開頭,說明本行也是執行命令的,該行展開後是這樣子的:g++ main.cpp -o test.o 該命令是呼叫g++編譯器,將main.cpp生成test.o

第9行,定義乙個名為clean的標籤沒有依賴檔案。

第10行,寫了clean標籤被呼叫的時候,執行的shell命令。該命令的作用是清除makefile所在的目錄下的所有字尾為.o的檔案。

我們在終端上執行:

make test
make命令就會找當前目錄下的makefile檔案,並呼叫test標籤,完成編譯,鏈結,執行的操作。

如果執行:

make clean

make就會執行clean標籤,清除makefile所在的目錄下的所有字尾為.o的檔案。

例項講解Linux下的makefile

1 程式 結構如下 makefile makefile haha.c hehe.c 1.1 需要被編譯的源 如下 cat haha.c include stdio.h int main cat hehe.c include stdio.h int main 1.2 makefile的指令碼如下 ca...

Makefile基礎講解

1 makefile基本語法 在makefile中我們經常看到 這幾個賦值運算子,那麼他們有什麼區別呢?我們來做個簡單的實驗 新建乙個makefile,內容為 ifdef define vre vre hello world else endif ifeq opt define vre hello ...

工程Makefile例項

1級makefil phony clean for subdir in subdirs do cd subdir make clean done 級makefile target lib notdir curdir a objs wildcard o cc flags fpic md 靜態庫合成動態...