您好,登錄后才能下訂單哦!
本系列(makefile)文章,從零基礎開始,通過實驗逐步分析makefile的語法特性,并最終打造一個可復用、可移植的專業編譯環境。
參考:
1.DT 唐老師門徒計劃課程
2.GNU make 手冊:http://www.gnu.org/software/make/manual/make.html
hello: // 目標
echo “hello makefile” // 實現目標要執行的命令,注意行首是一個table(\t)
make -f mf.txt hello // -f表示指定mf.txt文件為規則定義文件(Makefile),并執行文件里的hello目標
make // 執行默認規則定義文件(Makefile/makefile)中的默認目標(第一個目標)
Makefile 用于定義源文件和依賴關系,說明如何編譯各個源文件并生成可執行文件
依賴的定義:
targets:prerequests; command1
Command2
targets // 通常是需要生成的目標文件名,make所需要執行的命令名稱
prerequisite // 當前目標所依賴的其他目標或文件
command // 完成目標所需要的命令
當目標對應的文件不存在,執行對應命令
當依賴在時間上比目標更新,執行對應命令
當依賴關系發生時,對比依賴鏈上每一個目標
hello.out all : func.o main.o
gcc -o hello.out func.o main.o
func.o : func.c
gcc -o func.o -c func.c
main.o : main.c
gcc -o main.o -c main.c
默認情況下,make認為目標對應著一個文件,make會比較文件和依賴關系的新舊關系,決定執行是否執行命令,make以文件處理作為第一優先級。
所以當出現和目標同名的文件時,則在文件不被更新的前提下,目標不會被執行
通過PHONY關鍵字聲明一個偽目標,偽目標不對應任何實際的文件,不管偽目標的依賴時否更新,命令總是執行。
偽目標的語法:先聲明,后使用
本質:偽目標是make中特殊的目標:.PHONY的依賴
.PHONY : clean
clean :
rm *.o hello.out -rf
規則調用,模擬C語言函數的概念。
原理:當一個目標的依賴包含偽目標時,偽目標所定義的命令總是會被執行。
.PHONY : rebuild clean all
rebuild : clean all
all : hello.out
clean :
rm *.o hello.out -rf
原理:如果一個規則沒有命令或者依賴,并且他的目標不是一個存在的文件名,在執行此規則是,目標總會被認為是最新的。
clean : FORCE
rm *.o hello.out -rf
FORCE :
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。