目錄程序員
0. 掃盲
1. 編譯,連接
2. Makefile文件執行
3. Makefile書寫規則
4. 案例
5. Makefile是如何工做的
6. 拔高,參考spa
0. 掃盲3d
Linux 環境下的程序員若是不會使用GNU make來構建和管理本身的工程,應該不能算是一個合格的專業程序員,至少不能稱得上是 Unix程序員(是否是誇張了點,別人說的)。 code
什麼是makefile文件?它是一個指揮文件,指揮着源文件編譯的前後順序,以及如何連接在一塊兒。blog
1. 編譯,連接get
2. Makefile文件執行編譯器
寫好Makefile(或寫成makefile)文件後,直接執行命令make,編譯器會自動執行makefile裏的命令,進行編譯、連接知道生成最終能夠執行的文件。即編譯
make
3. Makefile書寫規則class
target : objects
command
其中變量
4. 案例
假設文件的關係以下圖
寫法1
main2 : main2.o sum.o hello.o
g++ -o main2 main2.o sum.o hello.o
main2.o : main2.cc sum.h
g++ -c main2.cc
sum.o : sum.cc sum.h hello.h
g++ -c sum.cc
hello.o : hello.cc hello.h
g++ -c hello.cc
參數 -o 後面是可執文件; -c後面是待編譯的文件。在前兩行中寫了不少重複的.o文件,能夠把它集合起來,用變量表示,以下:
寫法2
objects = main2.o sum.o hello.o
main2 : $(objects)
g++ -o main2 $(objects)
main2.o : main2.cc sum.h
g++ -c main2.cc
sum.o : sum.cc sum.h hello.h
g++ -c sum.cc
hello.o : hello.cc hello.h
g++ -c hello.cc
GUN的make至關強大,它能夠自動推導文件集文件依賴關係,寫法以下:
寫法3
objects = main2.o sum.o hello.o
main2 : $(objects)
g++ -o main2 $(objects)
main2.o : sum.h
sum.o : sum.h hello.h
hello.o : hello.h
文件執行完了之後生成不少.o文件,能不能能夠刪除掉,能夠的,寫上命令(例如clean),下面是執行的操做,例如:
寫法4
objects = main2.o sum.o hello.o
main2 : $(objects)
g++ -o main2 $(objects)
main2.o : sum.h
sum.o : sum.h hello.h
hello.o : hello.h
clean:
rm *.o
這樣執行 make clean,就會執行rm *.o 刪除全部的.o文件,即
make clean
5. Makefile如何工做的?
6. 拔高,參考
跟我一塊兒寫Makefile-陳皓