Makefile的簡單使用

2021-10-08 07:47:50 字數 2286 閱讀 8954

簡介

乙個工程中的原始檔不計其數,其按型別、功能、模組分別放在若干個目錄中,makefile定義了一系列的規則來指定,哪些 檔案需要先編譯,哪些檔案需要後編譯,哪些檔案需要重新編譯,甚至於進行更複雜的功能操作,因為 makefile就像乙個shell 指令碼一樣,其中也可以執行作業系統的命令。linux 環境下的程式設計師如果不會使用gnu make來構建和管理自己的工程,應該不 能算是乙個合格的專業程式設計師。

在 linux(unix )環境下使用gnu 的make工具能夠比較容易的構建乙個屬於你自己的工程,整個工程的編譯只需要乙個命 令就可以完成編譯、連線以至於後的執行。不過這需要我們投入一些時間去完成乙個或者多個稱之為makefile 檔案的編寫。所 要完成的makefile 檔案描述了整個工程的編譯、連線等規則。

makefile 和makefile都是一樣的,不過現在大部分都用makefile來命名了,用來區分以前的makefile的源程式。

makefile的規則

makeffile的格式:

#以'#'開頭的行表示注釋 

# 第一條目標為總的目標, # 依賴可以是檔案(目錄)或為其他目標 # 動作可以是linux命令,動作的那一行必須以tab鍵開頭

target: depend1 depend2 depend3 ...

[tab] action1

[tab ] @action2

target1:

[tab] action1

[tab] @action2

target, depend和命令構成了乙個makefile裡的乙個「規則」,規則指示make何時以及如何重新生成target或執行target下的命令

target通常是我們要生成的檔案的名字,擺放的順序不重要,但第乙個target是預設的target。當make不帶引數時,自動執行第乙個target。target也可以是要求make完成的動作,執行這種target後並不能得到和target同名的檔案,因此,也稱為偽target(phony target)。簡單來所target就是make命令的引數,輸入對應的引數就有對應的結果

depend是生成target所需的檔名列表。依賴可以為空,常用的「clean」target就常常沒有依賴,只有命令。若依賴不為空,則make會先檢查依賴的「規則」。依賴規定了何時重新執行target下命令。若任何依賴比target更新 (由於執行了依賴的「規則」的命令或使用者修改了依賴),make則會重新執行target下的命令。

make命令可以是任何乙個shell能執行的命令。

最前面的定義變數就相當於c中的巨集定義,指的是用乙個字串代替另乙個字串的功能。在makefile中可以使用「=」號來定義巨集,使用「$」來使用巨集;還可以用「+=」追加巨集的內容。習慣上,巨集名使用大寫。

還有一點的是如果在tagert下面一行也就是執行action前加上@表示執行make命令時,不會列印當前這條action所執行的命令,命令會執行,只不過不在命令列列印

makefile實列

我需要把下面gcc的命令通過makefile檔案實現。

首先先建立乙個makefile(makefile都可)

touch makefile

vim makefile

編寫makefile檔案

#當前目錄下的所有.c檔案

src =

$(wildcard *.c)

#gcc -c 編譯的中間檔案預設為只更改字尾名.c變成.o 。gcc -c hh.c 生成的中間名為 hh.o

obj =

$(patsubst %.c, %.o, $(src)

)#設定生成可執行檔案的名稱

#設定使用的編譯器

cc=gcc

#目標 依賴 執行動作的編寫

#將中間檔案相互連線,然後鏈結好動態庫

all:$(obj)

$(cc)

$(obj)

#生成中間檔案, @表示不再bash也就是命令列中列印執行的命令

$(obj)

:$(src)

@$(cc)

-c $

clear:$(obj)

rm *.o

clean:clear

rm

執行的結果為

makefile的簡單使用

main.c include test1.h include test2.h include int main test1.c include test1.h include void test1 func char str test1.h ifndef test1 h define test1 h...

makefile的簡單使用

乙個工程中的原始檔不計其數,其按型別 功能 模組分別放在若干個目錄中,makefile定義了一系列的規則來指定,哪些檔案需要先編譯,哪些檔案需要後編譯,哪些檔案需要重新編譯,甚至於進行更複雜的功能操作,因為 makefile就像乙個shell指令碼一樣,其中也可以執行作業系統的命令。linux 環境...

makefile的簡單使用

簡單說下makefile的使用,複雜的還沒有寫過,遇見再學習,隨時更新。用makefile的目的是為了管理大一點的專案,例如qt中的qmake等等 main main.o gcc main.o o main main.o main.c gcc c main.c clean rm f o this i...