簡介
乙個工程中的原始檔不計其數,其按型別、功能、模組分別放在若干個目錄中,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...